java中的值传递和引用传递问题
生活随笔
收集整理的這篇文章主要介紹了
java中的值传递和引用传递问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
值傳遞與引用傳遞
最近學基礎的時候,老師講了值傳遞和引用傳遞,這個問題一直不太明白,上網查了很多資料,按照自己的理解整理了一遍,發現之前不太明白的地方基本上想明白了,如有不正確的地方,歡迎指正,謝謝。
首先要說明的是java中是沒有指針的,java中只存在值傳遞,只存在值傳遞!!! ?然而我們經常看到對于對象(數組,類,接口)的傳遞似乎有點像引用傳遞,可以改變對象中某個屬性的值。但是不要被這個假象所蒙蔽,實際上這個傳入函數的值是對象引用的拷貝,即傳遞的是引用的地址值,所以還是按值傳遞。
?
?值傳遞
? ??示例:
public class Test3 {public static void change(int a){a=50;}public static void main(String[] args) {int a=10;System.out.println(a);change(a);System.out.println(a);} }?很顯然輸出的 是10,10。傳遞的是值得一份拷貝,這份拷貝與原來的值沒什么關系。
內存分析:
? ? ? ? ? ? ??
??引用傳遞
? ? ? 示例:
public class Test3 {public static void change(int []a){a[0]=50;}public static void main(String[] args) {int []a={10,20};System.out.println(a[0]);change(a);System.out.println(a[0]);} }顯然輸出結果為10 ? 50。實際傳遞的是引用的地址值。
內存分析:
? ? ? ? ? ??
?
?示例:
class Emp {public int age; } public class Test {public static void change(Emp emp){emp.age = 50;emp = new Emp();//再創建一個對象emp.age=100;}public static void main(String[] args) {Emp emp = new Emp();emp.age = 100;System.out.println(emp.age);change(emp);System.out.println(emp.age);System.out.println(emp.age);} }輸出為:100 ?50 ?50.
內存分析:
? ? ? ? ? ? ? ??
對于String類:
public class Test {public static void change(String s){s="zhangsan";}public static void main(String[] args) {String s=new String("lisi");System.out.println(s);change(s);System.out.println(s);} }輸出為:lisi ? lisi,由于String類是final修飾的,不可變,它會在內存中在開辟一塊新空間。
?
注:如有不正確的地方歡迎指正,謝謝
總結
以上是生活随笔為你收集整理的java中的值传递和引用传递问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外挂学习之路(12)--- 用CE搜索字
- 下一篇: delphi中的第三方控件如何安装