[英]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.