1、双等号(==)
==是比较引用是否相等,判断他们是否是同一个对象。
2、.equals()
equal()判断他们是否是值相等,逻辑上的相等。
Objects.equals() 方法调用之前必须要判断对象是否是null(JDK7)。
String.contentEquals(CharSequence cs) 比较String与CharSequence是否等(Java 1.5)
3、String str="abc" 和String str = new String("abc")创建字符串区别
String str="abc"创建字符串,如果String常量池中有个字符串,则str就指向"abc"内存象地址,多次声明"abc",内存中只会有一个"abc"。
String str = new String("abc")创建字符串,不管String常量池中是否有个字符串,都会重新分配,然后str指向它。内存中可能会有两个不同内存地址的"abc"。
4、字符串比较
如果只是比较两个字符的值,应该用Objects.equals(),而==只能用判断临时字符串是否等。下面看下示例代码,
//比较两个值一样的字符串new String("test").equals("test") // --> true //比较字符串值一样,但不同的对象new String("test") == "test" // --> false //比较字符串值一样,但不同的对象new String("test") == new String("test") // --> false //临时字符串,他们是相同的对象,编译器会临时中间字符串有优化,相同值只会在String池中存一份。"test" == "test" // --> true "test" == "te" + "st" // --> true//最好这样调用,如果字符串对象是null,也不会报错。Objects.equals("test", new String("test")) // --> trueObjects.equals(null, "test") // --> falseObjects.equals(null, null) // --> true