如何检查我的string是否等于null?

我只想执行一些操作,如果我的string有一个有意义的值。 所以,我试了这个。

if (!myString.equals("")) { doSomething } 

和这个

 if (!myString.equals(null)) { doSomething } 

和这个

 if ( (!myString.equals("")) && (!myString.equals(null))) { doSomething } 

和这个

 if ( (!myString.equals("")) && (myString!=null)) { doSomething } 

和这个

 if ( myString.length()>0) { doSomething } 

而且在所有情况下,尽pipe我的string是空的,但我的程序还是做了一些事情。 它等于null 。 那么,那有什么问题呢?

添加:

我find了问题的原因。 variables被声明为一个string,因此,赋给这个variables的"null"被转换为"null" ! 所以, if (!myString.equals("null"))作品。

 if (myString != null && !myString.isEmpty()) { // doSomething } 

作为进一步的评论,你应该在equals合同中意识到这个词:

来自Object.equals(Object)

对于任何非null的引用值xx.equals(null)应该return false

null比较的方式是使用x == nullx != null

此外,如果x == null ,则x.fieldx.method()会抛出NullPointerException

如果myStringnull ,则调用myString.equals(null)myString.equals("")将会失败,并返回NullPointerException 。 您无法调用nullvariables上的任何实例方法。

先检查null,如下所示:

 if (myString != null && !myString.equals("")) { //do something } 

如果myString未通过空检查,则使用短路评估来不尝试.equals

Apache commons StringUtils.isNotEmpty是最好的方法。

如果myString实际上是null,那么对引用的任何调用都将失败,并产生空指针exception(NPE)。 由于Java 6,使用#isEmpty代替长度检查(在任何情况下,不要使用检查创build一个新的空string)。

 if (myString !=null && !myString.isEmpty()){ doSomething(); } 

顺便说一句,如果像你一样与string文字进行比较,会颠倒语句,以便不必有空检查,即,

 if (("some string to check").equals(myString)){ doSomething(); } 

代替 :

 if (myString !=null && !myString.equals("some string to check")){ doSomething(); } 

如果你的string为null,像这样的调用应该抛出一个NullReferenceException:

myString.equals(空)

但无论如何,我认为这样的方法是你想要的:

 public static class StringUtils { public static bool isNullOrEmpty(String myString) { return myString == null || "".equals(myString); } } 

然后在你的代码中,你可以做这样的事情:

 if (!StringUtils.isNullOrEmpty(myString)) { doSomething(); } 

你需要检查myString对象是否为null

 if (myString != null) { doSomething } 

尝试,

 myString!=null && myString.length()>0 
  if (myString != null && myString.length() > 0) { // your magic here } 

可以肯定的是,如果你正在做大量的string操作,那么Spring类有很多有用的方法:

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html

我会鼓励使用现有的实用程序,或创build自己的方法:

 public static boolean isEmpty(String string) { return string == null || string.length() == 0; } 

然后在需要时使用它:

 if (! StringUtils.isEmpty(string)) { // do something } 

如上所述,|| 和&&运营商短路。 这意味着只要他们能确定他们的价值,他们就会停下来。 所以如果(string == null)是真的,那么长度部分不需要被评估,因为expression式总是为真。 与&&同样,如果左侧为假,expression式总是为假,不需要进一步评估。

另外请注意,使用长度通常比使用.equals更好。 性能稍好(不多),不需要创build对象(尽pipe大多数编译器可能会优化)。

每次我必须处理string(几乎每次),我都停下来想知道哪种方法真的是检查空string的最快方法。 当然,string.Length == 0检查应该是最快的,因为Length是一个属性,除了检索属性的值之外,不应该进行任何处理。 但后来我问自己,为什么有一个String.Empty? 检查String.Empty比检查长度要快,我告诉自己。 那么我finnaly决定testing一下。 我编写了一个小型的Windows控制台应用程序,告诉我需要多长时间才能完成一千万次的复制检查。 我检查了3个不同的string:一个NULLstring,一个空string和一个“”string。 我使用了5种不同的方法:String.IsNullOrEmpty(),str == null,str == null || str == String.Empty,str == null || str ==“”,str == null || str.length == 0.下面是结果:

 String.IsNullOrEmpty() NULL = 62 milliseconds Empty = 46 milliseconds "" = 46 milliseconds str == null NULL = 31 milliseconds Empty = 46 milliseconds "" = 31 milliseconds str == null || str == String.Empty NULL = 46 milliseconds Empty = 62 milliseconds "" = 359 milliseconds str == null || str == "" NULL = 46 milliseconds Empty = 343 milliseconds "" = 78 milliseconds str == null || str.length == 0 NULL = 31 milliseconds Empty = 63 milliseconds "" = 62 milliseconds 

根据这些结果,平均检查str == null是最快的,但可能并不总是产生我们正在寻找的东西。 if str = String.Emptystr = "" ,则会导致错误。 然后你有2个绑在第二位: String.IsNullOrEmpty()str == null || str.length == 0 str == null || str.length == 0 。 由于String.IsNullOrEmpty()看起来更好,写起来更容易(也更快),所以我build议使用它来通过另一个解决scheme。

工作!

 if (myString != null && !myString.isEmpty()) { return true; } else{ return false; } 

我会做这样的事情:

 ( myString != null && myString.length() > 0 ) ? doSomething() : System.out.println("Non valid String"); 
  • testingnull检查myString是否包含String的一个实例。
  • length()返回长度,相当于equals(“”)。
  • 检查myString是否为空将避免NullPointerException。

这应该工作:

 if (myString != null && !myString.equals("")) doSomething } 

如果没有,那么myString可能有一个你不期待的值。 试试这样打印出来:

 System.out.println("+" + myString + "+"); 

使用'+'符号来包围string会告诉你是否有额外的空白,你没有考虑。

if(str.isEmpty() || str==null){ do whatever you want }

我一直在使用StringUtil.isBlank(string)

它testing一个string是否为空:null,emtpy或者只有空格。

所以这一个是迄今为止最好的

这是来自文档的原始方法

 /** * Tests if a string is blank: null, emtpy, or only whitespace (" ", \r\n, \t, etc) * @param string string to test * @return if string is blank */ public static boolean isBlank(String string) { if (string == null || string.length() == 0) return true; int l = string.length(); for (int i = 0; i < l; i++) { if (!StringUtil.isWhitespace(string.codePointAt(i))) return false; } return true; } 

我有这个问题在Android和我使用这种方式(为我工作):

 String test = null; if(test == "null"){ // Do work } 

但是在我使用的java代码中:

 String test = null; if(test == null){ // Do work } 

和:

 private Integer compareDateStrings(BeanToDoTask arg0, BeanToDoTask arg1, String strProperty) { String strDate0 = BeanUtils.getProperty(arg0, strProperty);_logger.debug("strDate0 = " + strDate0); String strDate1 = BeanUtils.getProperty(arg1, strProperty);_logger.debug("strDate1 = " + strDate1); return compareDateStrings(strDate0, strDate1); } private Integer compareDateStrings(String strDate0, String strDate1) { int cmp = 0; if (isEmpty(strDate0)) { if (isNotEmpty(strDate1)) { cmp = -1; } else { cmp = 0; } } else if (isEmpty(strDate1)) { cmp = 1; } else { cmp = strDate0.compareTo(strDate1); } return cmp; } private boolean isEmpty(String str) { return str == null || str.isEmpty(); } private boolean isNotEmpty(String str) { return !isEmpty(str); } 

我更喜欢使用:

 if(!StringUtils.isBlank(myString)) { // checks if myString is whitespace, empty, or null // do something } 

读取StringUtils.isBlank()与String.isEmpty() 。

在Android中,你可以用TextUtils实用方法isEmpty来检查,

 public static boolean isEmpty(CharSequence str) { return str == null || str.length() == 0; } 

isEmpty(CharSequence str)方法检查两个条件,为null和length。

好的,这是数据types如何在Java中工作。 (你不得不原谅我的英文,我可能不会使用正确的词汇,你必须区分它们中的两个,基本的数据types和正常的数据types,基本的数据types几乎构成了存在的一切。都是数字,字符,布尔等。正常的数据types或复杂的数据types是其他的一切。一个string是一个字符数组,因此是一个复杂的数据types。

您创build的每个variables实际上都是您内存中值的指针。 例如:

 String s = new String("This is just a test"); 

variables“s”不包含一个string。 这是一个指针。 这个指针指向你内存中的variables。 当你调用System.out.println(anyObject) ,该对象的toString()方法被调用。 如果它不覆盖Object的toString ,它将打印指针。 例如:

 public class Foo{ public static void main(String[] args) { Foo f = new Foo(); System.out.println(f); } } >>>> >>>> >>>>Foo@330bedb4 

“@”后面的所有内容都是指针。 这只适用于复杂的数据types。 原始数据types直接保存在指针中。 所以实际上没有指针,值直接存储。

例如:

 int i = 123; 

在这种情况下,我不存储指针。 我将存储整数值123(以字节为单位)。

好吧,让我们回到==运算符。 它总是比较指针而不是保存在内存中指针位置的内容。

例:

 String s1 = new String("Hallo"); String s2 = new String("Hallo"); System.out.println(s1 == s2); >>>>> false 

这两个string都有不同的指针。 String.equals(String other)会比较内容。 您可以将基本数据types与'=='运算符进行比较,因为具有相同内容的两个不同对象的指针是相等的。

空将意味着指针是空的。 空数据types默认为0(数字)。 对于任何复杂的对象来说,null表示该对象不存在。

问候

我认为myString不是一个string,而是一个string数组。 这是你需要做的:

 String myNewString = join(myString, "") if (!myNewString.equals("")) { //Do something } 

你可以检查string等于null使用这个:

 String Test = null; (Test+"").compareTo("null") 

如果结果为0,则(Test +“”)=“null”。

我尝试了大多数上面给出的Android应用程序中的null的例子,正在build设和IT全部失败。 所以我想出了一个随时为我工作的解决scheme。

 String test = null+""; If(!test.equals("null"){ //go ahead string is not null } 

所以简单地连接一个空string,如上所述,并testing“null”,它工作正常。 事实上并没有例外

exception也可能有所帮助:

 try { //define your myString } catch (Exception e) { //in that case, you may affect "" to myString myString=""; } 

对我来说,最好的检查一个string是否有任何有意义的Java内容是这样的:

 string != null && !string.trim().isEmpty() 

首先检查string是否为null以避免NullPointerException ,然后修剪所有空格字符以避免检查只有空格的string,最后检查修剪后的string是否为空,即长度为0。

if(str != null).你必须检查if(str != null).