public class TestVO {
public static void main(String[] args) {
VO vo1 = new VO();
VO vo2 = new VO();
VO vo3;
VO vo4 = new VO();
vo1.setName("Sourav");
vo2.setName("Anil");
vo3 = vo1;
vo4 = vo1;
System.out.println(" " + vo4.getName());
vo1.setName("Abhishek.");
System.out.println(vo1.getName() + " " + vo2.getName() + " " + vo3.getName() + " " + vo4.getName());
}
}
Sourav
Abhishek. Anil Abhishek. Abhishek.
我的问题是为什么第二版是Abhishek..我在vo4对象中保留了一个vo1对象的副本,而不是引用。这意味着它创造了一个新的记忆。vo1和vo4是不同的。那么为什么vo4.getname在第二次更改。我正在设置vo1对象,但vo4是自动更改的。为什么会发生??
我在vo4对象中保留了一个vo1对象的副本,而不是引用。
不,您已经将变量vo1
和vo4
指向同一个对象,如下所示:
+-----+ | vo1 |--------\ +-----+ \ +----------------+ --->| (object) | +-----+ / | name = Abishek | | vo4 |--------/ +----------------+ +-----+
让我们按照代码进行操作:
VO vo1 = new VO();
+-----+ +----------------+ | vo1 |------------->| (object) | +-----+ | name = null | +----------------+
VO vo2 = new VO();
+-----+ +----------------+ | vo1 |------------->| (object) | +-----+ | name = null | +----------------+ +-----+ +----------------+ | vo2 |------------->| (object) | +-----+ | name = null | +----------------+
VO vo3;
...它只创建带有null
的vo3
(不指向任何对象)。
然后:
VO vo4 = new VO();
所以我们有:
+-----+ +----------------+ | vo1 |------------->| (object) | +-----+ | name = null | +----------------+ +-----+ +----------------+ | vo2 |------------->| (object) | +-----+ | name = null | +----------------+ +-----+ | vo3 | (is null) +-----+ +-----+ +----------------+ | vo4 |------------->| (object) | +-----+ | name = null | +----------------+
vo1.setName("Sourav");
vo2.setName("Anil");
+-----+ +----------------+ | vo1 |------------->| (object) | +-----+ | name = Sourav | *** change is here *** +----------------+ +-----+ +----------------+ | vo2 |------------->| (object) | +-----+ | name = Anil | *** and here *** +----------------+ +-----+ | vo3 | (is null) +-----+ +-----+ +----------------+ | vo4 |------------->| (object) | +-----+ | name = null | +----------------+
vo3 = vo1;
vo4 = vo1;
+-----+ | vo1 |----\ +-----+ \ \ +-----+ \ +----------------+ | vo3 |------------->| (object) | +-----+ / | name = Sourav | / +----------------+ +-----+ / | vo4 |----/ +-----+ +-----+ +----------------+ | vo2 |------------->| (object) | +-----+ | name = Anil | +----------------+
System.out.println(" " + vo4.getName());
...如你所料给了我们“Sourav”。
然后
vo1.setName("Abhishek.");
...更改vo1
、vo3
和vo4
都指向的对象:
+-----+ | vo1 |----\ +-----+ \ \ +-----+ \ +----------------+ | vo3 |------------->| (object) | +-----+ / | name = Abishek | / +----------------+ +-----+ / | vo4 |----/ +-----+ +-----+ +----------------+ | vo2 |------------->| (object) | +-----+ | name = Anil | +----------------+
问题内容: 我从“ Head First Java”学习“多态”,然后想到了这个概念。有人可以举例说明吗? 编译器检查引用类型的类,而不是对象类型。 那么引用类型和对象类型之间有什么区别? 问题答案: 我认为它们对“对象类型”和“引用类型”的使用不是标准化的,但这是我的解释。 考虑以下代码: 该 引用 是类型的。它引用的 对象 是类型。 因此,“引用类型”为,“对象类型”为。 造成这种混乱的原因是
问题内容: 我正在使用Eclipse来帮助我清理一些代码以正确使用Java泛型。大多数时候,它在推断类型方面做得非常出色,但是在某些情况下,推断类型必须尽可能地通用:对象。但是Eclipse似乎给了我一个选择,可以选择对象类型还是“?”类型。 那么两者之间有什么区别? 和 问题答案: 匹配项的实例,但不是。假设您要编写一个接受Strings到任何内容的映射的方法:如果您要编写 您无法提供。如果你写
问题内容: 我是Kotlin的新手,最近将一个简单文件从Java转换为Kotlin。我想知道为什么Android转换器将我的java类更改为Kotlin对象。 Java: 转换的Kotlin: 为什么不呢? 任何帮助将不胜感激谢谢。 问题答案: Kotlin对象就像一个无法实例化的类,因此必须按名称进行调用。(本身是静态类) android转换器看到您的类仅包含静态方法,因此将其转换为Kotlin
问题内容: 您能否简单地解释一下Transfer对象和Domain对象之间的区别?如果您可以举一个Java示例,那就太好了。 问题答案: DTO没有任何逻辑。他们只有字段(州)。在将数据从一个层/子系统传输到另一层/子系统时使用它们 域对象可以具有逻辑(取决于您使用的是域驱动设计还是贫乏的数据模型),并且它们通常与数据库结构相关。 如果使用贫乏的数据模型(即您的域对象没有任何逻辑),则DTO和域对
问题内容: 这发生在python2.7中 我正在研究python中元类的想法,几乎所有教程都将对象引用为python中类的实例。但是,在使用类A():定义类的形式时,我看到了: 这意味着当从不是对象固有的类创建实例时,该实例是实例,但是当类是对象固有的类时,该类的实例是对象吗? 谁能解释其中的区别?在现实生活中,我应该使用哪一个? 谢谢! 问题答案: 这是新样式类和旧样式类之间的区别,在文档中对此
问题内容: 我有类GUI,因此可以创建如下对象: 和像这样的参考变量: 现在,据我所知,g2是引用GUI类的引用变量,而g1是GUI类的对象。g1和g2有什么区别?我可以将GUI类的属性与对象一起使用,但是g2的可能用法是什么? 问题答案: 参考是名称。对象就是东西。您可以为事物使用不同的名称,即使对于实际上不存在的事物也可以使用不同的名称。 您可以声明名称,而无需实际给它们任何“真实的”含义,例