"new"关键字是否会更改对象引用的值?

Div*_*ero 2 java

假设我有一堆用于不同目的的类实例,所以我希望能够直接通过名称引用它们:

SomeObject aardvark = new SomeObject();
SomeObject llama = new SomeObject();
SomeObject tiger = new SomeObject();
SomeObject chicken = new SomeObject();
Run Code Online (Sandbox Code Playgroud)

但是我还想要一个数组来轻松迭代:

SomeObject[] animals = {aardvark, llama, tiger, chicken};
Run Code Online (Sandbox Code Playgroud)

我的问题是这个.当我这样做时会发生什么:

llama = new SomeObject();
Run Code Online (Sandbox Code Playgroud)

我将创建一个全新的美洲驼对象.这对我的动物阵列有何影响?它会引用新的llama对象,还是以某种方式引用旧的llama对象的副本?

我知道Java是"通过价值传递",但我仍然对这样的东西感到困惑.当我使用NEW关键字时,该对象引用的"值"是否会发生变化?谢谢!

Lau*_*ves 7

您的动物阵列将不受影响.

也许这会让你更容易想象.您的初始设置如下所示:

chicken ---------------------------> SomeObject
tiger ---------------------> SomeObject  ^
llama -------------> SomeObject  ^       |
aardvark --> SomeObject  ^       |       |
                 ^       |       |       |
                 |       |       |       |
animals -----> {[0],    [1],    [2],    [3]}
Run Code Online (Sandbox Code Playgroud)

当你这样做:

llama = new SomeObject();
Run Code Online (Sandbox Code Playgroud)

你正在创建一个新的"SomeObject",然后改变llama指向它.

chicken ---------------------------> SomeObject
tiger ---------------------> SomeObject  ^
                     SomeObject  ^       |
aardvark --> SomeObject  ^       |       |
                 ^       |       |       |
                 |       |       |       |
animals -----> {[0],    [1],    [2],    [3]}

llama -------> SomeObject
Run Code Online (Sandbox Code Playgroud)

要记住的重要一点是(非原始)变量和数组元素只是对象的引用,每当你看到"x = y;"时 (即使x是数组下标),它意味着"使x指代当前所指的y ".