日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中的值传递和引用传递问题

發布時間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的值传递和引用传递问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。