繁体   English   中英

与数字连接时,Java字符串比较不起作用

[英]Java string comparison is not working when concatenated with number

我对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的值是相同的,但它不起作用

在此先感谢您的解决方案

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

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

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

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

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

你想要的是比较他们的内容。 我建议你改用.equals

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

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

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

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

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

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


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

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

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

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

并确定您的数组元素可以指向同一个对象。 在你的第二个场景中,这已不再适用。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM