3 回答

TA貢獻1776條經驗 獲得超12個贊
這是因為 Java 遵循按值調用,而不是按引用調用。
當您傳遞s時,您實際上傳遞的是 s 的值,而不是實際的 s。因此,盡管您在 concateMe() 中更改了s,但它不會在您的 main 方法中更改。
當您傳遞bt時,更改會在您更改該引用的字段變量時產生影響。但是,如果您更改參考,則不會有任何效果。您可以在 main 方法中添加它:
System.out.println("before......");
System.out.println(bt.getId());
System.out.println(bt.getName());
changeBeanTest(bt);
System.out.println("after");
System.out.println(bt.getId());
System.out.println(bt.getName());
假設你的changeBeanTest是這樣的:
private static void changeBeanTest(BeanTest tempBeanTest) {
BeanTest bt = new BeanTest();
bt.setId("2");
bt.setName("Trump");
tempBeanTest = bt;
}
運行這個。從 main() 發送的bt不會有任何變化。

TA貢獻1876條經驗 獲得超7個贊
字符串 s = "gowth"; 在這一行中 s 指向字符串池中的“gowth”。當您在這里調用 private static void concateMe(String s, String string) 時,String s 與調用方方法 String s 不同。這里 String s 范圍是方法 ContactMe 的本地,但是contactMe本地字符串s指向調用者類字符串s所指向的相同“gowth”。在s = s +字符串之后;由于字符串是不可變的,方法本地引用字符串s指向不同的字符串“gowthami”,但調用者方法字符串s是仍然指向“gowth”。所以你得到了這個輸出。但是在 Bean 兩個對象都指向同一個 String 引用的情況下,一旦我們對引用進行了任何更改,它將同時反映在兩個對象中。

TA貢獻1796條經驗 獲得超10個贊
Bean 是 java 中通過引用傳遞給私有方法的完整對象,因此它在主方法和私有方法中是相同的實例。
您正在修改該實例的值,以便更改顯示在兩個位置。
該字符串或多或少是一個原語,并作為值的副本而不是來自 main 的確切實例傳遞。它是私有方法中的一個新實例,因此您正在修改一個新變量。更改不會顯示在 main 方法中,因為它是不同的實體。
添加回答
舉報