我正在尝试显示名称和区域,其中名称的最后一个字母等于该区域的最后一个字母。以下是我无法做到的尝试:
static void oneLine(String name, String region,
int area, long pop, long gdp)
{
if (name.substring(name.length() - 1) == name.substring(region.length()-1))
{
System.out.println(name+" "+region);
}
}
答案 0 :(得分:2)
使用equals(Object anObject)方法,而不是==
运算符
if (name.substring(name.length() - 1).equals(region.substring(region.length()-1))){
System.out.println(name+" "+region);
}
有关详细信息,请参阅Why would you use String.Equals over ==。
答案 1 :(得分:2)
一些事情:
您在平等双方都获得了name.substring
if (name.substring(name.length() - 1) == name.substring(region.length()-1))
// ↑ name again!!!
永远不要将字符串与==
Java
进行比较
if (name.substring(name.length() - 1).equals(region.substring(region.length()-1)))
答案 2 :(得分:0)
首先,您在条件的两侧使用名称。而是使用:
if (name.endsWith(region.substring(region.length()-1))) { ... }
其次,如果您将==
与String
一起使用,那么您正在使用身份。这意味着如果您使用相同的phisical String
对象,这只会导致true。所以:
new String("Something") == new String("Something") // Evaluates to false
解决这个问题的方法是使用等值。这是通过使用equals
方法完成的。当受到限制时,此方法必须遵循以下规则:
String
类实现了这种方式,它将检查字符是否相同。所以:
new String("Something").equals(new String("Something")) // Evaluates to true
// BUT
new String("Something").equals(new String("something")) // Evaluates to false - due to case sensitivity.
// SO
new String("Something").equalsIgnoreCase(new String("something")) // Evaluates to true
希望这有帮助。
答案 3 :(得分:-2)
我建议不要创建一个长字符串。
if (name.charAt(name.length() - 1) == region.charAt(region.length() - 1)) {
System.out.println(name + " " + region);
}
修改强>
我不知道为什么人们决定进行投票,但我会添加一个解释,为什么我建议不要创建一个长字符串。
if (name.substring(name.length() - 1).equals(region.substring(region.length()-1))
substring
始终创建一个新的String对象。所以这里只为相等比较创建了两个新的String对象(一个用于两个字符串的最后一个字符)。它们立即有资格获得下一次可能的垃圾收集,因为它们以后不会被使用
子串方法return (beginIndex == 0) ? this : new String(value, beginIndex, subLen)
if (name.charAt(name.length() - 1) == region.charAt(region.length() - 1))
charAt
返回对该位置角色的引用。因此,对该字符串实例的字符进行了相等比较
charAt方法return value[index]
的相关部分(String实例中的值为char value [])。