2011-12-02 100 views
2

这个代码不工作:不工作字符串比较Java中

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

我在Java的初学者,请帮助我们用这个代码。我试图比较两个字符串。

回答

2

您必须比较两个变量这样

if (name.equals(name1)) 

这应该工作而不是你所采取的方式!

14

你想:

if (name.equals(name1)) 

请注意,您希望

if (name == name1) 

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

此外,请注意,即使是顶级版本,也只是简单地执行字符串中UTF-16代码单元的比较序号。如果两个字符串在逻辑上表示相同的字符,但形式不同,则可能无法获得您期望的结果。如果你想做一个文化敏感的比较,你应该看看Collator。如果你真的是真的对Java来说是新的,那么你首先要用控制台应用程序和/或单元测试来探索语言而不是JSP - 它会给你一个更平滑的循环同时您正在学习基础知识以及更简单的工作环境。

此外,如果name是空引用,则顶部给出的代码将抛出NullPointerException。你应该考虑在这一点上你想要发生什么 - 如果字符串为空将代表一个错误,那么这个例外可能是合适的;否则,您可能需要更改代码。在Guava一个有用的方法(这是座充满好东西)是Objects.equal

if (Objects.equal(name, name1)) 

方法返回true,如果两个参数都为空,假,如果恰好一个参数为空,且结果如果它们都是非空的,则调用equals()。非常便利。

+0

@Jon Skeet用户正在使用“=”来比较字符串不是“==”,并且还有一些其他的语法错误。我试图弄清楚。 – gprathour

+0

@GPSingh:是的,我知道 - 他们说他们是初学者,这就是为什么我指出了各个方面的原因,包括使用'=='的“天真”但语法正确的版本。 –

+0

@JonSkeet是的,这也是我在我的答案中试图指出的。 – gprathour

0

您发布的代码并不是真的Java。另外,您不会将'=='与赋值运算符'='进行比较。最后,要对“对象”或来自Object的任何东西进行适当的比较,您需要使用.equals(...)方法。

==比较意味着“是同一个对象”,而不是“具有相同值的对象”。差异似乎很小;但是,如果你选择按照它们的价值比较对象,那么它根本不算小。两个Object可以创建具有相同的“值”,只有.equals(...)允许你考虑这两个Object是相同的。

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

==仅适用于比较诸如int或long之类的基元。 如果你想比较字符串,你必须使用equals()或compareTo()。 Single =是通过名称= name1进行赋值而不是比较,您实际上将字符串name1分配给变量名称。

3

您的误区:

  1. 您正在使用"="符来比较字符串。它不是一个条件操作符,它是一个Assignment操作符。 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) 

,而忽略大写小字母大小写。