簡體   English   中英

Java-字符串和數組引用

[英]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;

那么您正在修改 cd引用的數組的內容。

您有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM