我从数据库中获取值9999912499。 我使用substring将它分为两部分99999和12499。 现在我想检查第一个字符串是否等于99999然后我做一些处理,否则其他处理。 但控件永远不会进入if循环
以下是快照:
String strPscId = Long.toString(pscID);
String convPscID = strPscId.substring(5, strPscId.length());
String checkNine = strPscId.substring(0,5);
BigDecimal jpaIdObj = jeuParam.getJpaIdObj();
Long mod_id = modele.getModId();
log.info("outstrPscId == " +strPscId);
log.info("outconvPscID == " +convPscID);
log.info("outcheckNine == " +checkNine);
log.info("outjpaIdObj == " +jpaIdObj);
log.info("outmod_id == " +mod_id);
if(checkNine == "99999") { <method-call> }
else { <another - method - call> }
答案 0 :(得分:1)
出于某种原因,制作java的人决定==
不应该用来比较字符串,所以你必须使用
checkNine.equals("99999");
请查看以下代码:
String str1 = "abc";
String str2 = str1;
在第一行中,创建一个新字符串并将其存储在计算机的内存中。 str1
本身不是该字符串,而是对该字符串的引用。在第二行中,str2
设置为等于str1
。与str2
一样,str1
只是对内存中某个地方的引用。但是,str2
不是创建一个全新的字符串,而是对str1
引用的内存中相同位置的引用。 ==
检查引用是否相同,但.equals()
检查字符串中的每个字符是否与另一个字符串中的相应字符相同。
boolean bool1 = (str1 == str2);
boolean bool2 = str1.equals(str2);
如果此代码已添加到上面的代码中,则bool1
和bool2
都将为真。
String str1 = "abc";
String str2 = new String(str1);
boolean bool1 = (str1 == str2);
boolean bool2 = str1.equals(str2);
在这种情况下,bool2
仍然有效,但bool1
为false。这是因为str2
未设置为等于str1
,因此它不是对内存中相同位置的引用str1
是对new String(str1)
的引用。相反,str1
会创建一个全新的字符串,其值为str1
。 str2
和new String(str1)
是对内存中两个不同位置的引用。它们包含相同的值,但根本不同之处在于它们存储在两个不同的位置,因此是两个不同的东西。
如果我将"abc"
替换为str1
或bool1
,则new
将为真,因为如果没有关键字new
,JVM只会创建一个新的字符串来存储在内存中如果绝对必要。 .equals()
强制JVM创建一个全新的字符串,无论内存中的任何位置是否已经与正在创建的新字符串具有相同的值。
==
速度较慢,但通常比==
更有用,速度要快得多,但往往并不总能达到预期效果。很多时候,.equals()
可以使用与.equals()
相同的结果,但很难分辨出这些时间。除非你是一个知识渊博的程序员制作速度很重要的东西,否则我建议你总是使用{{1}}。
答案 1 :(得分:0)
您需要使用equals
方法,而不是==
来比较字符串。
从
改变if(checkNine == "99999")
到
if(checkNine.equals("99999"))
答案 2 :(得分:0)
==
运算符用于比较两个变量的内容。当使用原始类型(甚至是因为自动装箱而包装的类)时,这可以正常工作。但是,当我们使用==
来引用对象(例如,checkNine)时,内容是对象的引用,而不是对象的值。这是使用equals()
方法的地方。
if("99999".equals(checkNine)){
<method-call>
}
else {
<another - method - call>
}
答案 3 :(得分:-1)
if(checkNine.equals( "99999")) {
<method-call>
}
else {
<another - method - call>
}
答案 4 :(得分:-1)
if (strPscId.startsWith("99999"))
{
bla bla
}
else
{
sth else than bla bla
}