在Java中从字节/整数创建字符串

在Java中从字节/整数创建字符串,java,types,type-conversion,Java,Types,Type Conversion,我想知道为什么以下代码不起作用: String test = new String(new byte[] {92, 92, 92, 92, 92}); System.out.println(test); String compare = "\\\\\\\\\\"; System.out.println(compare); if (test == compare) { System.out.println("Yes!"); } 输出为: \\\\\ \\\\\ 我不理解的数据类型转换发生在哪里

我想知道为什么以下代码不起作用:

String test = new String(new byte[] {92, 92, 92, 92, 92});
System.out.println(test);
String compare = "\\\\\\\\\\";
System.out.println(compare);
if (test == compare) {
System.out.println("Yes!");
}
输出为:

\\\\\
\\\\\
我不理解的数据类型转换发生在哪里


编辑:/fail:(

字符串与.equals()比较,而不是与==

原因是,对于引用(就像字符串变量一样),==只检查内存位置中的相等性,而不是内容中的相等性

文本\\\存在于内存中的一个位置。另一个是在构建字符串的其他位置创建的。它们不在同一位置,因此执行此操作时不会返回true==

你应该这样做

if(test.equals(compare))

您使用的是标识比较,而不是字符串比较


尝试
test.equals(compare)
。然后尝试
test.intern()==比较
。两者都应该起作用。该方法是对
字符串
对象执行对象标识比较的唯一可靠方法。

Java中的字符串是引用类型,并且==检查它们是否是相同的字符串,而不是相等的字符串。我知道这很混乱。长话短说,您需要这样做:

if(test.equals(compare)){


有关更多信息,请参见此处:

您正在测试这些对象是否相同,而不是它们是否是相等的字符串

但是,以下测试是正确的:

test.intern() == compare.intern()

可能的重复:如果你认为这是我使用的等式的问题,那就是重复。如果你读了标题,我肯定会变得很明显,我不知道这是等式的问题,这是正确的。你在做一个引用比较,而不是值比较。它们不是同一个对象,但它们是等价的。使用Equals和is应该是有效的。“intern()”只要求“test”是intern(),因为“compare”是源文件中的一个文本(这意味着它已经被intern)。如果它是以与“test”相同的方式创建的,则需要使用test.intern()==compare.intern()(这通常是一种不好的做法,除非保证有相对较少的或至少受限制的不同字符串数)。没错!谢谢你指出这一点,Calum。对于XML处理器或其他可以创建大量字符串的地方,插入字符串可能很有用。这有点像飞锤模式。