为什么在将args [0]与字符串进行比较时输出?

Jig*_*esh -1 java string comparison

可能重复:
如何比较Java中的字符串?

当我运行以下代码为"java XYZ BOY"输出为"无效类型"时,如何?

public class XYZ 
{
    public static void main(String args[])
    {


        if(args[0]=="BOY")
            System.out.println("He is boy");

        else if(args[0]=="Girl")
            System.out.println("She is girl");

        else
        System.out.println("Invalid type");


    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用时args[0].equals("BOY"),它会提供所需的输出.当我不使用时,我想知道为什么出现问题String.equals()

Hov*_*els 6

运算符==测试两个变量是否引用了您不感兴趣的同一个对象.相反,您想知道两个String变量是否引用String对象,这些对象在相同的顺序和相同的情况下保持相同的字符,这是做什么equals(...),或者无论如何,这是做什么的equalsIgnoreCase(...).

所有类都equals(...)从最终父类Object获取一个默认方法,如果没有被覆盖,它将==按照API 执行相同的操作:

类Object的equals方法实现了对象上最具辨别力的等价关系; 也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true).

许多类都重写了这个方法,以使用他们自己的对类有意义的测试.String就是这样一个类.有关String如何执行此操作的更多详细信息,请查看其API,其中指出:

将此字符串与指定的对象进行比较.当且仅当参数不为null并且是表示与此对象相同的字符序列的String对象时,结果才为真.

说完所有这些 - 投票把这个问题作为重复.