If语句 - 针对String对变量或变量检查字符串?

时间:2009-08-07 21:45:38

标签: java if-statement

  

可能重复:
  Gracefully avoiding NullPointerException in Java
  Multilingual fields in DB tables

     

完全重复

     

Gracefully avoiding NullPointerException in Java

你更喜欢什么?我只是讨厌看到最后一个。它似乎倒退了。

String randomtext = "stack overflow";

if(randomtext.equals("stack overflow"))
{
      //do something
}

String randomtext = "stack overflow";

if("stack overflow".equals(randomtext))
{
     //do something
}

11 个答案:

答案 0 :(得分:15)

与某些人的想法相反,这两个在功能上并不相同。如果NullPointerExceptionrandomtext,则第一个会抛出null第二个不会。这就是我选择后者的原因。

答案 1 :(得分:2)

如果字符串变量可以是null,那么您总是希望将文字放在第一位。

"stack overflow".equals(randomtext)

永远不会导致NullPointerException,但

randomtext.equals("stack overflow")

将{,如果randomtext == null

出于这个原因,虽然我喜欢变量.equals(literal),但我使用了前者。

答案 2 :(得分:1)

我更喜欢第一个。我喜欢写条件:Test_Subject< - > Control_Value

答案 3 :(得分:1)

我倾向于检查null:

if(randomtext != null && randomtext.equals("stack overflow"))
{
      //do something
}

答案 4 :(得分:0)

我会说一般意见会转向第一种,它更具可读性。

答案 5 :(得分:0)

根据具体实施情况,这可能是个人偏好。

现在,如果randomtext有可能为空,我认为Merdad的帖子很重要。

但是举个例子,

String randomtext = "stack overflow";

if(randomtext.equals("stack overflow"))
{
      //do something
}

这没关系,因为在这种情况下randomtext总是会出现“堆栈溢出”。

如果你想知道哪个“更好”,那么它取决于为什么它更好,这取决于你。

答案 6 :(得分:0)

我宁愿

String randomText = "stack overflow";
String otherRandomText = "something else";

if(randomText.equals(otherRandomText))
{
   //do something
}

答案 7 :(得分:0)

我也喜欢第一个。正如Mehrdad指出的那样,第二个具有技术优势(不会在null上抛出异常),但我认为它不太自然。

我对if (null != myVar)也有同样的看法 - 对我来说,它只是看不对。空 - 或文字字符串 - 永远不会改变,所以询问它是否等于某些东西 - 虽然有意义且字面上正确 - 但似乎是错误的。

答案 8 :(得分:0)

这取决于你的目的。

首先,您无论如何都不应该在程序中包含文本。如果您必须在多个位置更改该文本,这是标准实践。所以这应该是一个常数或枚举。

考虑到这一点,你会有 String randomtext =“stack overflow”; const String stackoverflow =“stack overflow”;

现在问你哪个看起来更好看 randomtext.equals(计算器) 和 stackoverflow.equals(randomtext)

我不知道这是否真的很重要。我通常会将实际的测试用例放在()中。

答案 9 :(得分:0)

在C或C ++中,后一种结构可能是首选,因为它很容易混淆以下两种

if(randomNumber == 5) if(randomNumber = 5)

第二个在语法上是有效的,但是一个赋值语句总是返回true,同时将randomNumber设置为5.这可能不是预期的。如果你习惯于总是使用结构编写C ++比较

if(5 == randomNumber)

然后你更安全,因为如果你不小心写=而不是==,编译器会尖叫你。

这个论点对于原始发布的例子没有那么多水,但它确实解释了为什么一些程序员习惯于在进行比较时把常量放在第一位,即使大多数人认为反过来似乎更自然。旧习惯很难过。

答案 10 :(得分:0)

我更喜欢org.apache.commons.lang.StringUtils.equals()及其所有相关的String函数。那么无效哪个是空的,它是为你处理的。

我相信StringUtils中的所有方法都是null安全的。