2

我对 java 人的问题是,当我比较两个字符串时

imageName=new String[20];    
....    
imageName[1]="img1";  
imageName[2]="img1";  

if(imageName[1]==imageName[2])  
{  
 ////  codes  
}

它工作得很好,但是当我通过数字连接制作字符串时它不起作用

imageName=new String[20];  
int j=1,k=1;  
imageName[1]="img"+j;  
imageName[2]="img"+k;

 if(imageName[1].toString()==imageName[2].toString())     
        {  
           ////  codes  
        }  

尽管 j 和 k 的值相同,但它不起作用

提前感谢您的解决方案

4

7 回答 7

7

比较两个字符串时应该使用String.equals :

if (imageName[1].equals(imageName[2])
于 2012-08-13T14:49:09.933 回答
1

您不应将字符串与 进行比较==,而应使用.equals方法:imageName[1].equals(imageName[2])

==比较指针是否相等,因此true如果两个变量都表示内存中完全相同的实例。在第一种情况下,之所以如此,是因为 Java 池化字符串文字以提高性能。但是在第二种情况下,您将获得两个不同的堆分配对象,尽管它们的内容相同,但它们仍然是两个不同的对象。

于 2012-08-13T14:49:23.127 回答
1

您正在比较两个 String 是否是完全相同的对象。

您的意图是比较它们的内容。我建议你.equals改用。

于 2012-08-13T14:49:35.733 回答
1

永远不要使用“==”来比较 Java 中的字符串。使用equals()方法。==运算符检查两个 String 变量是否引用内存中的同一位置,而该方法equals()检查两个单独的 String 对象是否包含相同的字符。这是第二个定义在这里有意义:您的字符串连接正在创建单独的字符串对象,但我们仍然希望将它们视为“相等”。

于 2012-08-13T14:50:29.327 回答
1

The correct way to compare strings is using equals() method

所以,请更改您的代码如下,

if (imageName[1].equals(imageName[2])

并且请考虑在发布之前对 SO 进行研究,因为这样的问题之前已经回答过很多次了。

于 2012-08-13T14:53:29.573 回答
0

比较两个String你最好使用equals()方法

 if(imageName[1].equals(imageName[2]))
{
//// codes
}

于 2012-08-13T14:50:20.027 回答
0

==是参考比较。也就是说,您正在确定这两个对象是否实际上是同一个对象。如果您使用equals(),那么该方法会比较字符串的内容,即这些对象是否具有相同的内容(您会明白这里有细微的差别)

您的第一个场景有效,因为编译器足够聪明,可以意识到您有两次相同的字符串。即它看起来:

imageName[1]="img1";  
imageName[2]="img1"; 

并确定您的数组元素可以指向同一个对象。在你的第二种情况下,这不再是真的。

imageName[1]="img"+j;  
imageName[2]="img"+k;

编译器无法可靠地确定这些可能是相同的字符串对象(也非常正确)。

所以(一般来说)你应该使用 equals() 来比较Strings。您可以使用引用相等(它更快,因为它比较引用而不是字符串内容),但您必须绝对确定您在做什么(也许您正在使用String.intern()- 但那里有缺点

于 2012-08-13T14:52:10.527 回答