Discuss / Java / 1

结合 C语言的 “二级指针” 和 “指针数组” 应该会比较好理解,但 C 语言我也忘得差不多了......

不知到这样理解对不对:

---------------------------------------------------

以之前的的字符串数组为例:

String[] names = {"ABC", "XYZ", "zoo"}

首先,这个数组它是有3个地址的,这3个地址又分别保存着另外3个地址,而另外3个地址才是保存着字符串:

【地址 => 数据】 【地址  => 数据】

0x0001 => 0x0007;0x0007 => "ABC"

0x0002 => 0x0008;0x0008 => "XYZ"

0x0003 => 0x0009;0x0009 => "zoo"

然后修改一个元素:

names[2] = "cat";

发生的变化是:

0x0003 => 0x000A;0x000A => "cat"

而 names 变量,指向着地址 0x0001,这个地址才是被传递出去的。所以,这就能理解为什么 “一方修改,两方影响”,因为大家用的都指着同一个地址 “0x0001”。

以上是 “字符串数组” 的问题,接下来是 “字符串” 的问题:

String s = "hello";


0x0001 => "hello";

(擦,没写完就发出来了,继续补充)

变量 s 指向这地址 0x0001,这个地址是传递出去的。

然后修改这个变量:

s = "world";

s 指向的地址变了:

s:
0x0002 => "world"

而之前传递出去的 0x0001 里的数据依然是 "hello"。所以它们 “互不影响”。


  • 1

Reply