java中數據的傳遞方式到底是怎樣的!


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

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

題是真樣的:

 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 }

輸出的結果是:?6

 有解釋說:change方法里面是將傳入的參數修改成10,但是並沒有對SendValue的屬性str就行修改,要修改必須指明this.str="10",所有答案還是6。

 

還有一題是這樣的:

 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;

有的解釋說:String類是final類型的,不能繼承和修改這個類。str=“tesk ok”,其實是隱含的讓Java生成一個新的String對象,那么就與原來的“Hello”沒有任何關系,當函數結束,str作用結束,所以輸出的還是“Hello”。 char ch[] 是傳遞引用,修改了原內容。

 

然后我上網查,java是按值傳遞還是引用傳遞,有的說:

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

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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM