int i = 0;
int j = i;
System.out.println("initial int: " + j); // 0
Integer ii = new Integer(0);
Integer jj = ii;
System.out.println("initial Integer: " + jj); // 0
String k = new String("s");
String l = k;
System.out.println("initial String: " + l); // "s"
Person person1 = new Person("Furlando"); // from constructor -> publ. instance var. 'name'
Person person2 = person1;
System.out.println("initial Person: " + person2.name); // "Furlando"
/*--------------------*/
System.out.println();
/*--------------------*/
i += 1;
System.out.print("added 1 to int: [" + i);
System.out.println("], and primitive which also \"refers\" to that (has a copy, actually), has a value of: [" + j + "]");
ii += 1;
System.out.print("added 1 to Integer object: [" + ii);
System.out.println("], and object which also refers to that, has a value of: [" + jj + "]");
k += "tring";
System.out.print("added \"s\" to String object: [" + k);
System.out.println("], and object which also refers to that, has a value of: [" + l + "]");
person1.name = "Kitty";
System.out.print("changed instance variable in Person object to: [" + person1.name);
System.out.println("], and object which also refers to that, has a value of: [" + person2.name + "]");
/* [COMPILER OUTPUT]
initial int: 0
initial Integer: 0
initial String: s
initial Person: Furlando
A) added 1 to int: [1], and primitive which also "refers" to that (has a copy, actually), has a value of: [0]
B) added 1 to Integer object: [1], and object which also refers to that, has a value of: [0]
C) added "s" to String object: [string], and object which also refers to that, has a value of: [s]
D) changed instance variable in Person object to: [Kitty], and object which also refers to that, has a value of: [Kitty]
*/
我理解A,我们在那里有一个原语;没有引用。by-复制。
我希望B和C的行为与D相同——根据它们被给予的引用而改变。
为什么这个对象引用另一个对象只对用户定义的对象“起作用”,而不是整数、字符串等。?
这与操作员的工作有关。
您真正在做的是在调用=
时重新分配值
Integer i = 1;
Integer j = i;
i = i + 1;
因此,现在i指向另一个等于2的整数,j仍然指向原来的整数。
您的字符串示例也是如此。
在对象的情况下,不更改指针,而是更改对象的内部状态。因此,person1和person2都指向同一个人。
如果你做到了
Person person1 = new Person("Alice");
Person person2 = person1;
person1 = new Person("Bob");
那么很明显,person1现在是一个不同的人了。
这种行为与用户定义的对象与内部对象无关,但事实上,“Integer”和“String”(以及所有其他基本包装器)对象的处理非常特殊。整数只是一个围绕原始整数的“包装器”,因此它的行为不是真正的“引用类型”。所有这些包装器对象都实现为不可变的-对整数的相同引用永远不会有其他值。
另一方面,如果需要,这些包装器对象会自动转换为基本类型,因此它们的一般使用速度较慢。它们的好处是,它们可以为null,这有时很好。
在Java中,String和Integer对象是不可变的。当您这样做时:ii=1或创建新对象。变量jj和l指向旧对象。这就是为什么你会看到不同的价值观。
我有一个如下所示的Powershell数组: 我需要找到TSMserver和集群的所有VM都具有相同的值。 我需要一个命令来检索(例如)这两个VM,因为它们共享相同的第一个值。 所以实际上我需要将数组中的每个对象与其他对象进行比较,以找到前两个属性的公共值。 提前非常感谢!
问题内容: 我有上述2个类(POJO),它们都是绝对相同的(除了课程名称),我将它们添加到两个数组列表:aListA和aListB。我需要比较两个对象是否相同。如果它们相同,则需要将它们添加到另一个列表(commonList)中,如果它们恰好是不同的,则需要将它们添加到另一个列表(differentList)中。我写了以下代码: 我的问题是,即使两个不同POJO中的数据(变量,firstId和se
我目前正在尝试制作一个赛车模拟器,以便学习一些Java。我制作了每个车手和他们的车的对象: 每个车手都有许多价值观,这些价值观决定了他在比赛中的表现: 然后,当我进入比赛状态并尝试模拟第一场比赛时,我得到了车手总体的变量(值为50-100),并在总体上添加了一个“运气”因素以获得结果。 控制台输出示例: 我不知道如何在不排序的情况下对“CreateDrivers.drivers[x]”的所有值进行
我已经被覆盖了hashcode和equals以查找具有相同开始日期和关闭日期的值。我得到了重复对象的类似哈希代码。当等同于这些对象时,我得到了布尔值“假”。在我的理解中,对象==对象比较对象的引用,即使引用是相同的;代码返回假。你能帮我理解是什么问题吗?我在下面发布了我的代码: Main.java 输出: 检查客户对象引用:Customer@643 对象引用(位于Map中):[Customer@6
我想从有更多经验的人那里得到一些建议,他们在Java中使用原始的双相等。由于可能的舍入错误,对两个双和使用是不够的。 我的问题是: > 使用相对误差计算某个增量值,是否有一个通用(而不是特定于应用程序)的增量值值得推荐?请参阅下面的示例。 下面是一个通用函数,用于检查考虑相对错误的相等性。您建议的值是多少,以捕获简单操作 ,-,/,* 操作中的大部分舍入错误?
问题内容: 有没有人在编写比较两个REST服务的测试方面有任何技巧?我们这样做是作为回归测试的一种形式。 我希望按照以下方式做一些事情: 向两个服务发送“ / 1”的GET并比较结果 向这两个服务发送POST,然后比较结果 向两个服务发送一个PUT,并比较结果 这个想法是: 每个操作都发送到两个服务 结果应该相同 REST服务是用Java / Jersey编写的,因此使用它是理想的,但是人们发现有