我们在写程序的过程中,判断会将两个对象进行对比。比如拿字符串来说吧!
String hello = "Hello"; String greeting = "Hello"; String str = new String("Hello"); System.out.println("hello.equals(greeting):" + hello.equals(greeting)); //true System.out.println("hello == greeting:" + (hello == greeting)); //true System.out.println("hello == str:" + (hello == str)); //false 因为地址不一样,重新分配了一个新的地址去存储str System.out.println("hello equals str:" + hello.equals(str)); //true
我们在使用比较的时候,可以使用==和equals,但是它们是有区别的。我们使用equals方法检测两个字符串是否相等时比较字符串里面的内容。如果内容相等,则返回true,否则返回false。
一定不要使用==运算符检测两个字符串是否相等,这个运算符只能够确定两个字符串是否放置在同一个位置上。如果字符串放置在同一个位置上,它们必然是相等的。但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。
如果虚拟机始终将相同的字符串共享,就可以使用==运算符检测是否相等。但实际上只有字符串常量是共享的。而使用+或者substring等操作产生的结果并不是共享的,因此千万不要使用==运算符测试字符串的相等性,以免产生相应的问题。