似乎某个地方出现了一个非常愚蠢的错误,因为以下的hello-world计划对我不起作用。
PositioningManager.OnPositionChangedListener
我甚至尝试过import com.google.common.io.BaseEncoding;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
String hello = "hello";
junit.framework.Assert.assertEquals(
hello.getBytes(),
BaseEncoding.base64().decode(
BaseEncoding.base64().encode(hello.getBytes())
)
);
我错过了什么?
答案 0 :(得分:4)
阵列(令人困惑)不会覆盖Object.equals()
(同样他们也不会覆盖.toString()
,这就是为什么在打印数组时会看到useless \[Lsome.Type;@28a418fc
strings的原因),这意味着在两个等效数组上调用.equals()
将无法获得您期望的结果:
System.out.println(new int[]{}.equals(new int[]{}));
这会打印false
。啊。请参阅有效Java项目25:首选列表到数组以获取更多信息。
相反,您应该使用Arrays
类中的静态帮助函数对数组执行这些操作。例如,这会打印true
:
System.out.println(Arrays.equals(new int[]{}, new int[]{}));
请尝试使用Arrays.equals()
或JUnit' Assert.assertArrayEquals()
代替Assert.assertEquals()
:
junit.framework.Assert.assertArrayEquals(
hello.getBytes(),
BaseEncoding.base64().decode(BaseEncoding.base64().encode(hello.getBytes())
)
);
这应该符合预期。
答案 1 :(得分:2)
如果您改为检查字符串是否匹配,那么它确实匹配。
junit.framework.Assert.assertEquals(
hello,
new String(
BaseEncoding.base64().decode(
BaseEncoding.base64().encode(hello.getBytes())
)
));
你的支票看的是地址,我不知道为什么。如果您查看字节[]中的值,您会看到它们匹配。
System.out.println("hello.getBytes = " + Arrays.toString(hello.getBytes()));
System.out.println("decoded = " + Arrays.toString(BaseEncoding.base64().decode(
BaseEncoding.base64().encode(hello.getBytes())
)
));
输出:
hello.getBytes = [104, 101, 108, 108, 111]
decoded = [104, 101, 108, 108, 111]