是否有一种简洁的内置方法在JUnit中对两个类似类型的数组进行等于断言?默认情况下(至少在JUnit 4中)它似乎在数组对象本身上进行实例比较.
EG,不起作用:
int[] expectedResult = new int[] { 116800, 116800 };
int[] result = new GraphixMask().sortedAreas(rectangles);
assertEquals(expectedResult, result);
Run Code Online (Sandbox Code Playgroud)
当然,我可以手动完成:
assertEquals(expectedResult.length, result.length);
for (int i = 0; i < expectedResult.length; i++)
assertEquals("mismatch at " + i, expectedResult[i], result[i]);
Run Code Online (Sandbox Code Playgroud)
..但有更好的方法吗?
public class ByteArr {
public static void main(String[] args){
Byte[] a = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
Byte[] b = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
byte[] aa = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
byte[] bb = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
System.out.println(a);
System.out.println(b);
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(aa);
System.out.println(bb);
System.out.println(aa == bb);
System.out.println(aa.equals(bb));
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么他们都打印假.
当我运行"java ByteArray"时,答案是"false false false false".
我认为a []等于b []但是JVM告诉我我错了,为什么?
我需要比较两个byte []数组的元素,但只能达到固定长度.对于我使用的整个阵列java.util.Arrays.equals().当然我可以复制子范围(Arrays.copyOf()),但我不想这样做.我也确信在没有新的实用程序方法实现的情况下应该有标准的方法.
我正式需要的是:
java.util.Arrays.equals(byte[] a, byte [] b, int length)
Run Code Online (Sandbox Code Playgroud)
有什么意义吗?我没有看到广泛使用的方法.
再次提出要求防止错误答案: - 数组等于长度限制. - 我有手动实现,但我想用标准的东西替换它. - 我不想要任何副本.
先感谢您.
我想比较两个数组.
我初始化它们:
public static int [][] craftarray = {{0,0,0},{0,0,0},{0,0,0}};
public static int [][] stone = {{0,0,0},{0,0,0},{0,0,0}};
Run Code Online (Sandbox Code Playgroud)
当我试图比较它们时使用:
Inventory.craftarray.equals(Craft.stone)
Run Code Online (Sandbox Code Playgroud)
它没有说它们是平等的所以我打印出阵列.
工艺阵列以0的形式返回,而石头返回'[[@ @ 44ffb2'.
为什么会这样?