不工作在Java中的字符串比较

时间:2011-12-02 05:57:34

标签: java

此代码无效:

String name = "Bob";
String name1 = "Anne";
if name = name1;
System.out.println ("Hello");

我是Java的初学者,请帮助我们使用此代码。我想比较两个字符串。

5 个答案:

答案 0 :(得分:14)

你想:

if (name.equals(name1))

请注意,想要

if (name == name1)

语法正确,但会比较两个字符串引用的相等性,而不是比较所涉及的对象是否代表相同的字符序列

此外,请注意,即使是顶级版本也只是对字符串中的UTF-16代码单元执行序数比较。如果两个字符串在逻辑上代表相同的字符但形式不同,则可能无法获得预期的结果。如果您想进行文化敏感的比较,您应该查看Collator

此外,我建议如果您非常新的Java,那么您可以从控制台应用和/或单元测试开始探索语言而不是JSP - 它会给你在学习基础知识和更简单的工作环境时,循环更顺畅。

此外,如果NullPointerException是空引用,则顶部给出的代码将抛出name。你应该考虑在那一点你想要发生什么 - 如果字符串为null无论如何都会代表一个bug,那么异常可能是合适的;否则,您可能想要更改代码。 Guava中的一个有用的方法(其中包含好东西)是Objects.equal

if (Objects.equal(name, name1))

如果两个参数为null,则返回true;如果一个参数为null,则返回false;如果两个参数都为null,则返回调用equals()的结果非空。非常方便。

答案 1 :(得分:3)

你的错误:

  1. 您正在使用"="运算符来比较字符串。它不是一个条件运算符,它是一个赋值运算符。 Java中的条件运算符是"==",用于比较两个值是否相等。你甚至不能将这个用于字符串。

  2. 你写的是这样的:

    if name = name1; 
    System.out.println ("Hello"); 
    
  3. 你在if语句的末尾添加了一个分号。所以它什么也不做(如果你的条件应该是正确的,这不是在这种情况下),但条件是否正确。

    1. 您缺少围绕if语句中给出的条件的parantheses。

      Synatx of if statement is : if(condition)
      
    2. 所以必须在你的病情周围写"()"

      现在,为了比较字符串,String类为我们提供了如下方法:

      stringOne.equals(stringTwo)
      

      它会检查完全相同的字符串。

      stringOne.equalsIgnoreCase(stringTwo)
      

      它会忽略Caps-Small字母的情况。

答案 2 :(得分:2)

你必须比较像这样的两个变量

if (name.equals(name1)) 

这应该有效,而不是你做的方式!!!

答案 3 :(得分:1)

if(name.equals(name1))
  System.out.println("Hello");

==仅在比较int或long等基元时才有效。 如果要比较String,则必须使用equals()或compareTo()。 Single =是一个赋值而不是通过执行name = name1进行比较,你基本上将字符串name1赋给变量名。

答案 4 :(得分:0)

您发布的代码并非真的是Java。此外,你不能比较' =='使用赋值运算符' ='。最后,为了正确比较对象或来自Object的任何内容,您需要使用.equals(...)方法。

==比较意味着"是相同的对象",而不是"是具有相同值"的对象。差异似乎很小;但是,如果您选择按对象比较对象,则它根本不小。可以使用相同的"值"创建两个Object,只有.equals(...)允许您将这两个Object视为相同。