[英]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()
的结果。 非常便利。
你的错误:
您正在使用"="
运算符来比较字符串。 它不是一个条件运算符,它是一个赋值运算符。 Java中的条件运算符是"=="
,用于比较两个值是否相等。 你甚至不能将这个用于Strings。
你写的是这样的:
if name = name1; System.out.println ("Hello");
你在if语句的末尾放了一个分号。 所以它什么都不做(如果你的条件应该是正确的,这不是在这种情况下),但条件是否正确。
你缺少围绕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.