在 Java 中不起作用字符串比较



此代码不起作用:

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

我是 Java 的初学者,请帮助我们完成这段代码。我正在尝试比较两个字符串。

你需要:

if (name.equals(name1))

请注意,您想要

if (name == name1)

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

此外,请注意,即使是顶级版本也只会对字符串中的 UTF-16 代码单元进行序号比较。如果两个字符串在逻辑上表示相同的字符,但形式不同,则可能无法获得预期的结果。如果要进行区分区域性的比较,则应查看Collator

此外,我建议如果你真的是Java的新手,你从控制台应用程序和/或单元测试开始探索语言而不是JSP - 它会给你一个更平滑的循环,同时你学习基础知识,以及一个更简单的工作环境。

更重要的是,如果 name 是空引用,则顶部给出的代码将抛出NullPointerException。您应该考虑此时要发生的情况 - 如果字符串为 null 无论如何都会表示错误,那么异常可能是合适的;否则,您可能需要更改代码。番石榴(里面装满了好东西(的一个有用方法是Objects.equal

if (Objects.equal(name, name1))

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

你的错误:

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

  2. 你这样写:

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

您在 if 语句的末尾放置了一个分号。所以它什么也不做(如果你的条件应该是正确的,在这种情况下不是(,但是条件是真的还是假的。

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

    Synatx of if statement is : if(condition)
    

因此,必须围绕您的病情写"()"

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

stringOne.equals(stringTwo)

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

stringOne.equalsIgnoreCase(stringTwo)

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

您必须像这样比较这两个变量

if (name.equals(name1)) 

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

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

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

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

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

最新更新