-1

我从数据库中得到一个值为 9999912499 的值。我使用子字符串将它分为两​​部分 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> }
4

5 回答 5

1

出于某种原因,制作 java 的人决定==不应该用来比较字符串,所以你必须使用

checkNine.equals("99999");

看下面的代码:

String str1 = "abc";
String str2 = str1;

在第一行中,创建了一个新字符串并将其存储在您的计算机内存中。str1本身不是那个字符串,而是对该字符串的引用。在第二行中,str2设置为 equal str1str2就像 一样str1,只是对内存中某个位置的引用。但是,不是创建一个全新的字符串,而是对内存中str2同一str1位置的引用。==检查引用是否相同,但.equals()检查字符串中的每个字符是否与另一个字符串中的相应字符相同。

boolean bool1 = (str1 == str2);
boolean bool2 = str1.equals(str2);

如果将此代码添加到上面的代码中,则两者bool1bool2为真。

String str1 = "abc";
String str2 = new String(str1);
boolean bool1 = (str1 == str2);
boolean bool2 = str1.equals(str2);

在这种情况下bool2仍然是真的,但是bool1是假的。这是因为str2未设置为 equal str1,所以它不是对内存中相同str1位置的引用。相反,new String(str1)创建一个全新的字符串,其值为str1. str1并且str2是对内存中两个不同位置的引用。它们包含相同的值,但根本不同在于它们存储在两个不同的地方,因此是两个不同的东西。如果我替换new String(str1)"abc"or str1bool1那将是真的,因为如果没有关键字new,JVM 只会在绝对必要时创建一个新字符串来存储在内存中。new强制 JVM 创建一个全新的字符串,无论内存中的任何位置是否已经具有与正在创建的新字符串相同的值。

.equals()慢,但通常比 更有用==,后者要快得多,但通常并不总是能提供所需的结果。有很多时候==可以使用与 相同的结果.equals(),但很难判断这些时间是什么时候。除非你是一个知识渊博的程序员,在速度很重要的情况下,我建议你总是使用.equals().

于 2013-11-14T15:55:42.323 回答
0

您需要使用equals方法,而不是==比较字符串。

从改变

if(checkNine == "99999") 

if(checkNine.equals("99999"))
于 2013-11-14T15:57:15.677 回答
0

==运算符用于比较两个变量的内容。这在使用原始类型(甚至是自动装箱的包装类)时按预期工作。但是,当我们使用==对对象的引用时(例如,checkNine),内容是对对象的引用,而不是对象的值。这是equals()使用方法的地方。

if("99999".equals(checkNine)){ 
    <method-call>
}
else { 
    <another - method - call> 
}
于 2013-11-14T15:59:18.583 回答
-1
if (strPscId.startsWith("99999"))
{
     bla bla
}
else
{
     sth else than bla bla
}
于 2013-11-14T16:04:05.953 回答
-1
if(checkNine.equals( "99999")) { 
   <method-call> 
}
else { 
     <another - method - call>
}
于 2013-11-14T15:56:48.413 回答