数组java上的代码段

时间:2014-03-19 18:41:32

标签: java

所以我正在做审查,并且遇到了这个我不太确定的问题。

考虑以下代码段:

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。

有人可以解释一下吗?

感谢您的帮助。

4 个答案:

答案 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");
}

希望这会有所帮助,卢克。