gpt4 book ai didi

java - java中的平等

转载 作者:行者123 更新时间:2023-12-01 07:49:54 26 4
gpt4 key购买 nike

java中的==运算符检查两个对象是否位于同一内存位置。这是否意味着如果 object1 != object2object1 未与 obejct2 链接?我所说的链接是指如果 object1 发生变化,那么 obejct2 也会发生变化。

最佳答案

== 检查两个引用是否相同。

换句话说:如果该检查返回 true,则只有一个对象。

如果返回 false,则有两个 个对象。

但是,当然,我们可以轻松地编写一些代码,其中 a != b;但 a.foo() 会对 b 产生影响。

喜欢:

class Bar {
private static int counter = 0;
void foo() { counter++ };
int getCounter() { return counter; }

当你现在有:

Bar a = new Bar();
Bar b = new Bar();

然后 a != b;但仍然,当你这样做时

System.out.println(b.getCounter());
a.foo();
System.out.println(b.getCounter());

将打印 0,然后打印 1。

因此,从本质上讲,你的第二个问题的答案是:a != b 确实意味着“用 a 做某事”对 b 没有任何作用。

但郑重声明 - 最后一句话是为什么静态在良好的面向对象设计中可以被视为异常;正是为了这种“奇怪”的副作用。

编辑回答“容器和克隆会发生什么”?

当然,当你有类似的情况时:

List<WhatEver> a = some list containing one object "X"
List<WhatEver> b = a "clone" of a

然后 a != b;但是当然;当您调用影响 b.get(0) 的 a.get(0).foo() 时...因为两个列表在内部都指向相同的 X

你会看到:在这种情况下,a.equals(b) 将返回true;而 a == b 为 false。

关于java - java中的平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39984088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com