java中數據的傳遞方式究竟是怎樣的!

今天早上我了一道有關java的題。主要考點是考java中值得傳遞方式。java

以前我在javaoo裏總結的是:基本數據類型中保存的是實際的值,引用數據類型保存的是被引用的內存地址,那麼基本數據類型就是按值傳遞,引用數據類型就是按地址來傳遞的。(難道我一開始就錯了)函數

題是真樣的:this

 1 public class SendValue{
 2     public String str="6";
 3     public static void main(String[] args) {
 4         SendValue sv=new SendValue();
 5         sv.change(sv.str);
 6         System.out.println(sv.str);
 7     }
 8     public void change(String str) {
 9         str="10";
10     }
11 }

輸出的結果是:?6spa

 有解釋說:change方法裏面是將傳入的參數修改爲10,可是並無對SendValue的屬性str就行修改,要修改必須指明this.str="10",全部答案仍是6。code

 

還有一題是這樣的:對象

 1 public class Example{
 2     String str=new String("hello");
 3     char[]ch={'a','b'};
 4     public static void main(String args[]){
 5         Example ex=new Example();
 6         ex.change(ex.str,ex.ch);
 7         System.out.print(ex.str+" and ");
 8         System.out.print(ex.ch);
 9     }
10     public void change(String str,char ch[]){
11         str="test ok";
12         ch[0]='c';
13     }
14 }

輸出的答案是 : ?   hello and cb;blog

有的解釋說:String類是final類型的,不能繼承和修改這個類。str=「tesk ok」,實際上是隱含的讓Java生成一個新的String對象,那麼就與原來的「Hello」沒有任何關係,當函數結束,str做用結束,因此輸出的仍是「Hello」。 char ch[] 是傳遞引用,修改了原內容。繼承

 

而後我上網查,java是按值傳遞仍是引用傳遞,有的說:內存

按值傳遞:指的是在方法調用時,傳遞的參數是按值的拷貝傳遞。就是說傳遞的是拷貝後的值,與前面那個值無關了。it

引用傳遞:指的是在方法調用時,傳遞的參數是按引用進行傳遞,其實傳遞的引用的地址,也就是變量所對應的內存空間的地址。傳遞先後都是同一個引用。

可是又有人說這是不對的,他說Java中只有按值傳遞,沒有按引用傳遞!

各位大神們,給我解釋解釋嘛!

相關文章
相關標籤/搜索