5.基本型別引用型別傳遞
阿新 • • 發佈:2022-05-19
int型別的傳值(注意並沒有返回值,只是修改其傳入的值)具體程式碼如下: @AllArgsConstructor @NoArgsConstructor @ToString @Data class Person { private int age; private String name; } public class TestTransferValue { public void changeInt(int age) { age = 30; } public void changePerson(Person person) { person.setAge(30); } public void changeString(String str){ str="你好"; } public static void main(String[] args) { //重點1:更改基本型別的值--->輸出的竟然是18而不是30 TestTransferValue testTransferValue = new TestTransferValue(); int age=18; testTransferValue.changeInt(age); System.out.println("int---->"+age); //重點2:修改引用型別的值--->輸出修改以後的值 Person person = new Person(18,"吳孟達"); testTransferValue.changePerson(person); System.out.println("person---->"+person); //重點3:修改String---->輸出的仍是吳孟達 String str="吳孟達"; testTransferValue.changeString(str); System.out.println("String--->"+str); } } 輸出: int---->18 person---->Person(age=30, name=吳孟達) String--->吳孟達 int型別的傳值(注意並沒有返回值,只是修
public void changeInt(int age) {
age = 30;
}
重點理解:基本型別的值是儲存在各自的執行緒棧中(執行緒的工作記憶體)
引用型別的值
public void changePerson(Person person) {
person.setAge(30);
}
重點理解:區域性變數的引用型別:物件名稱存放線上程棧中(儲存堆中物件的記憶體地址),具體物件存放在堆中
傳遞String
public void changeString(String str){ str="你好"; } 重點:字串常量池的存在(jdk版本號<=1.6字串常量池在方法區,>=1.7在堆區) 出現str="你好";會直接在常量池建立一個新的字串"你好",並返回字串地址,即這兩個引用已經沒有任何關係 所以main方法輸出的是自己的引用!