今天早上我了一道有關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中只有按值傳遞,沒有按引用傳遞!
各位大神們,給我解釋解釋嘛!