值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身,
1.基本資料型別都是值傳遞
package com.example.basic; public class Test { public static void main(String[] args) { int a=10; modify(a); System.out.printf("\n方法main中的a等于%d",a);輸出:方法main中的a等于10 } public static void modify(int a){ a=20; System.out.printf("方法modify中的a等于%d",a);輸出:方法modify中的a等于20 } }
堆疊里保存的是變數和方法,堆里保存的是具體實體化的物件
原理:
兩個a都保存在堆疊中,沒有交集,互不影響,所以不會發生改變
2.如果傳遞的是一個需要實體化的物件,就是參考傳遞
package com.example.basic; public class Test { public static void main(String[] args) { int[] a={1,2,3}; modify(a); System.out.println("方法main中的a[1]:"+a[1]);輸出:方法main中的a[1]:88 } public static void modify(int[] a){ a[1]=88; System.out.println("方法modify中的a[1]:"+a[1]);輸出:方法modify中的a[1]:88 } }
原理
陣列在堆疊里申明了,但具體資料是保存在堆中,堆疊中保存的是具體資料的記憶體參考地址,a和a[1]是同一個記憶體地址,所以了修改a[1]了,會改動到a,
面試時怎么回答:
值傳遞不會改變本身,基本資料型別都是值傳遞(String也這樣,括號里不用說),當發生參考傳遞,并且傳遞的值會實體化到JVM的堆中,如果在傳遞的程序中,改動到了傳遞的值,由于傳遞的值和本身,指向同一個記憶體地址,所以它本身會被修改到,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/550540.html
標籤:其他
下一篇:Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak<T>