网上关于String的equals和==的资料挺多的,昨天看到好多文章都有错 ,自己一定要运行代码确认辨别。就简单总结以下,希望能帮助到大家,如果有错误欢迎指出,大家互相学习,共同进步。
个人总结:equals是比较值是否相同,==则比较的是引用地址是否相同。
package com.char3;
public class StringTest {
/**
* StringBuffer 是可变的字符序列的类似字符串的对象,对其进行改变时返回对同一实例的引用
* 代码运行结果:
* is equal true
* is == true
* 说明:sb和sb1是同一个引用地址
*/
public static void useStringBuffer(){
StringBuffer sb = new StringBuffer("sb你好");
StringBuffer sb1= sb.append(",陈瑞");
System.out.println("is equal "+sb.equals(sb1));
System.out.println("is == " + (sb==sb1));
}
/**
* String 创建对象s,吧s的引用传给str
* 代码运行结果:
* is equal true
* is == true
* 说明:s 和str 的值相同,引用地址也相同
*/
public static void useString(){
String s = "你好";
String str = s ;
System.out.println("is equal "+s.equals(str));
System.out.println("is == "+(s == str));
}
/**
* String 创建str1的时候把“nihao”放在常量池中,当创建str2的时候先去常量池中查看是否有相同的常量值,如果存在则吧常量的引用给str2
* 代码运行结果:
* is equal true
* is == true
* 说明:str1和str2的值相同,引用地址也相同
*/
public static void useString1(){
String str1="nihao";
String str2 = "nihao";
System.out.println("is equal "+str1.equals(str2));
System.out.println("is == "+(str1==str2));
}
/**
* String创建的字符串 是不可变的,str表面看是对s的修改,其实质没修改原字符串,而是新建了字符串对象str
* 一下的代码运行结果:
* is equal false
* is == false
* 说明:s 和 str 值不等,引用地址也不用
*/
public static void useString2(){
String s = "你好";
String str = s+"chenrui" ;
System.out.println("is equal "+s.equals(str));
System.out.println("is == "+(s == str));
}
public static void main(String[] args) {
useStringBuffer();
useString();
useString1();
useString2();
}
}网上关于String的equals和==的资料挺多的,昨天看到好多文章都有错 ,就简单总结以下,希望能帮助到大家,如果有错误欢迎指出,大家互相学习,共同进步。 个人总结:equals是比较值是否相同,==则比较的是引用地址是否相同。