Java中无法进行字符串比较

Java中无法进行字符串比较,java,Java,此代码不起作用: String name = "Bob"; String name1 = "Anne"; if name = name1; System.out.println ("Hello"); 我是一名Java初学者,请帮助我们学习这段代码。我正在尝试比较两个字符串。您想要: if (name.equals(name1)) 请注意,您不希望 这在语法上是正确的,但会比较两个字符串引用是否相等,而不是比较所涉及的对象是否表示相同的字符序列 此外,请注意,即使是最上面的版本,也会对字符串中

此代码不起作用:

String name = "Bob";
String name1 = "Anne";
if name = name1;
System.out.println ("Hello");
我是一名Java初学者,请帮助我们学习这段代码。我正在尝试比较两个字符串。

您想要:

if (name.equals(name1))
请注意,您不希望

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

此外,请注意,即使是最上面的版本,也会对字符串中的UTF-16代码单元执行顺序比较。如果这两个字符串在逻辑上表示相同的字符,但形式不同,则可能无法得到预期的结果。如果你想做一个文化敏感的比较,你应该看看

此外,我建议,如果您对Java真的是新手,您可以从控制台应用程序和/或单元测试开始,而不是使用JSP来探索该语言——这将使您在学习基础知识的过程中有一个更加流畅的循环,并使工作环境更加简单

此外,如果
name
是空引用,则顶部给出的代码将抛出
NullPointerException
。你应该考虑在那一点上你想发生的事情——如果字符串为null将代表一个bug,那么例外可能是适当的;否则,您可能需要更改代码。一个有用的方法是使用对象(里面塞满了好东西)。equal:

if (Objects.equal(name, name1))

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

您发布的代码不是真正的Java。此外,您不会将“==”与赋值运算符“=”进行比较。最后,要正确比较“Object”或从
Object
派生的任何对象,需要使用
.equals(…)
方法


==
相比,表示“是相同的对象”,而不是“是具有相同值的对象”。差别似乎很小;但是,如果您选择按对象的值来比较对象,那么它一点也不小。两个<代码>对象< /代码> s可以用相同的“值”创建,并且只有<代码>。相等(…)<代码>允许您考虑这两个代码>对象< /代码> s是相同的。

您必须比较这两个变量,例如

if (name.equals(name1)) 
这应该是工作,而不是你做它的方式

if(name.equals(name1))
  System.out.println("Hello");
==仅在比较int或long等基本体时有效。 如果要比较字符串,必须使用equals()或compareTo()。Single=是一种赋值,而不是通过name=name1进行比较。实际上,您将字符串name1赋值给变量名。

您的错误:

  • 您正在使用
    “=”
    运算符来比较字符串。它不是条件运算符,而是赋值运算符。Java中的条件运算符是
    “==”
    ,用于比较两个值是否相等。你甚至不能用这个来表示字符串

  • 你是这样写的:

    if name = name1; 
    System.out.println ("Hello"); 
    
  • 您已经在if语句的末尾放了一个分号。因此,不管条件是真是假,它都不会起任何作用(如果你的条件被认为是正确的,这在本例中不是)

  • 您缺少关于if语句中给出的条件的论断

    Synatx of if statement is : if(condition)
    
  • 因此,必须围绕您的情况编写
    “()”

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

    stringOne.equals(stringTwo)
    
    它检查完全相同的字符串


    它将忽略大写字母和小写字母

    @Jon Skeet User正在使用“=”来比较字符串而不是“=”,并且还有一些其他语法错误。我试图弄明白。@GPSingh:是的,我知道-他们说他们是初学者,这就是为什么我指出了各个方面,包括“幼稚”但语法正确的版本,它将使用
    ==
    @JonSkeet yea,这也是我在回答中试图指出的。
    stringOne.equals(stringTwo)
    
    stringOne.equalsIgnoreCase(stringTwo)