[英]Java - String and array references
剛開始學習Java時,發現字符串和數組都是引用類型。 我不明白以下問題:
String a = "a1";
String b = "a2";
a=b;
a = "rrr";
System.out.println(a);
System.out.println(b);
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0]= 19;
System.out.println(arr1[0]);
當我打印它時,我得到: "rrr" "a2" 10
當使用數組時-我知道它們都指向同一個對象,所以如果我更改單元格-我會在arr1和arr2處看到差異。
關於“字符串”-根據我的理解,當我做a = b時,它不應該是:“讓b
指向同一對象上的a
點”-意味着如果我更改a,那么它們都還需要更改嗎?
謝謝!!
在數組的情況下,您實際上是在修改數組,因此,如果更改了一個引用,則另一個也將更改。
在字符串的情況下,您不是在修改對象,只是在為該引用分配其他對象。 如您所述: a=b
表示“將一個點指向與b所指向的對象相同的對象”。 按照同樣的思路, a="rrr"
意思是“將一個點指向文字” rrr“”,與b無關。
因此, 重新分配與修改是不同的。
如果你有
String a = "foo";
String b = a;
那么你已經分配 b
指同一個對象作為a
。 如果你那么做
b = "bananas";
那么您還沒有修改字符串,而是重新分配了 b,因此它不再與a
引用相同的對象。
另一方面
int[] c = { 1, 2, 3 };
int[] d = c;
在這里,我們再次指定d
來引用與c
相同的對象(數組)。 如果您執行以下操作:
d[0] = 10;
那么您正在修改 c
和d
引用的數組的內容。
您有3個字符串對象和1個數組對象。
“ a1”,“ a2”,“ rrr”
{1,2,3}
String a = "a1"; // a points to a new object "a1"
String b = "a2"; // b points to a new object "a2"
a=b; // a points to b's object "a2"
a = "rrr"; // a points to new object "rrr"
System.out.println(a); // prints "rrr" to console
System.out.println(b); // Prints "a2" to console
int[] arr1 = {1,2,3}; // arr1 points to new array {1,2,3}
int[] arr2 = arr1; // arr2 points to array in arr1 {1,2,3}
arr2[0]= 19; // modifies the array arr2 points to {19, 2, 3}
System.out.println(arr1[0]); // Prints "19" to console
首先,String是不可變的。 Immutalbe表示您不能更改對象本身,但是可以更改引用。 就像您的情況一樣-
String a = "a1"; // a is a reference variable and point to new object with value "a1"
String b = "a2"; // b is a reference and point to new object with value "a2"
a=b; // now a is referencing same object as b is referencing, a and b value is "a2"
a = "rrr"; // at this time "rrr" is creating a new String object with value "rrr" and now a is pointing to this object.
因此,b仍然指向“ a2”,而現在a指向新對象“ rrr”。 這就是為什么兩者都打印不同的值。
System.out.println(a);
System.out.println(b);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.