所以我正在做审查,并且遇到了这个我不太确定的问题。
考虑以下代码段:
int[] A = {1,2,3};
int[] B = {1,2,3};
int[] C = A;
执行此代码后,以下哪个表达式将评估为true?
I. A.equals (B)
II. A == B
III. A ==C
我只是
仅限II
仅限III
仅限I和III
I,II和III
我以为这只是我,但我的一个同学说它只是III。
有人可以解释一下吗?
感谢您的帮助。
答案 0 :(得分:1)
答案在@J L的上述相关问题中:
Arrays.equals(array1,array2)正如您所期望的那样工作(即比较 content),array1.equals(array2)回退到Object.equals 实现,反过来比较身份,因此更好 替换为==(对于纯粹主义者:是的我知道null)。
简单地说,你将C设置为等于A,这就是为什么A == C为真的原因。您基本上执行了Object.equals
。虽然A.equals(B)
表面上看起来是真的,但它们并不是因为Object.equals
背后的内部原因。
所以你的朋友是对的。
答案 1 :(得分:1)
第三个有一个和c指向同一个对象。其他人没有。
答案 2 :(得分:1)
你的朋友是对的。
在代码中你说C = A.
这意味着C与A完全相同。
在其他情况下,它们不是同一个对象,尽管它们具有相同的内容。
您可能希望查看返回true的Arrays.deepEquals(您的代码稍作修改):
包数组;
import java.util.Arrays;
public class ArraysTest {
public static void main(String[] args) {
Integer[] A = { 1, 2, 3 };
Integer[] B = { 1, 2, 3 };
Integer[] C = A;
System.out.println("A.equals(B) is " + (A.equals(B)));
System.out.println("Arrays.deepEquals(A, B) is "
+ (Arrays.deepEquals(A, B)));
System.out.println("A == B is " + (A == B));
System.out.println("A == C is " + (A == C));
}
}
输出将是:
A.equals(B) is false
Arrays.deepEquals(a, b) is true
A == B is false
A == C is true
答案 3 :(得分:1)
只有第三个是真的。
拿第一个
int[] A = {1,2,3};
女巫意味着A的位置为0:1,位置1:2,位置2:3。
然后拿第二个int[] B = {1,2,3};
女巫意味着B的位置为0:1,位置1:2,位置2:3。
所以它们在每个位置都有相同的值,但它们是两个不同的int数组
然后拿第三个
int[] C = A;
他们说'int [] C等于int [] A,
就像说
String a = "LOL";
String b = a;
也只是一些注释,只使用.equals
比较字符串使用==
比较其他任何内容,并且始终使用小写字母表示变量,这样可以更容易编码。
您始终可以使用此
测试方法if(A.equals(B)
{
System.out.println("A.equals(B) is true");
}
else
{
System.out.println("A.equals(B) is false";
}
同样适用于
if(A == B)
{
System.out.println("A == B is true");
}
else
{
System.out.println("A == B is false");
}
希望这会有所帮助,卢克。