繁体   English   中英

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

[英]Not working String comparison in 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无论如何都会代表一个bug,那么异常可能是合适的; 否则,您可能想要更改代码。 Guava中有一个有用的方法(它充满了好东西)是Objects.equal

if (Objects.equal(name, name1))

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

你的错误:

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

  2. 你写的是这样的:

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

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

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

     Synatx of if statement is : if(condition) 

所以必须在你的病情周围写上"()"

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

stringOne.equals(stringTwo)

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

要么

stringOne.equalsIgnoreCase(stringTwo)

它将忽略Caps-Small字母案例。

你必须比较这两个变量

if (name.equals(name1)) 

这应该工作,而不是你的方式!

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM