Java中的"=="和"equals()"的区别 String中的单例模式
2017-07-25 09:55
776 查看
1.“==”和“equals”的区别
① “==”是一个比较运算符,既可以比较基本数据类型,也可以比较引用数据类型。对于基本数据类型,比较的是值;对于引用数据类型,比较的是地址值。② “equals”是一个方法,只能比较引用数据类型,所有对象都会继承Object中的equals方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型没有区别,重写后的equals方法比较的是对象中的属性。
③对于String类,由于重写了此方法,String中的equals比较的是字符串的内容是否相同,对于下面的例子:
String s1="abc"; String s2="abc"; System.out.println(s1==s2); System.out.println(s1.equals(s2));
输出结果: true true
原因解释:对于String 对象,存在常量池,字符串“abc”存在常量池中,当再次定义s2并赋值“abc”时,会先看一下常量池中是否存在“abc”,如果存在,便将“abc”的地址赋值给s2,这样s1和s2同时指向了“abc”,所以利用==比较时,输出为true。
2.String中常量池
对于常量池,上面③中已将提及。注意下面的例子:
String s1=new String("abc");
上面的语句创建了几个对象??
正确答案是2个。
原因解释:一个在常量池中,一个在堆中(是常量池的副本)。
再举一个例子:
String s1=new String("abc"); String s2=new String("abc"); System.out.println(s1==s2); System.out.println(s1.equals(s2));
输出结果:false true
上面的语句创建了几个对象??
正确答案是3个。
原因:一个在常量池中,另外两个在堆中(都是常量池中对象的副本)。当让此时,比较s1==s2时,输出结果为false 。因为s1和s2指向的地址不相同
- 注意下面的情况,如图所示
输出结果: false true
对于s1+“c” 如果是一个字符串对象和字符串相加,底层是利用StringBuffer的append方法实现了字符串拼接,然后又利用StringBuffer中toString方法转换成了String对象,然后将地址赋值给了s3,所以,s2和s3 的地址是不一样的。
String s1="a"+"b"+"c"; //java中采用了常量优化机制,自动转成了字符串"abc" String s2="abc"; System.out.println(s1==s2);
输出结果: true
相关文章推荐
- Java - "==" and "equals" are different method to String Class
- Java "==" 和 .equals()的区别
- 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别
- 【Java面试题】3 Java的"=="和equals方法究竟有什么区别?简单解释,很清楚
- Java SE String的equals方法与"=="的区别浅析
- 分分钟让你了解String中的"=="和equals()区别
- "=="和equals方法究竟有什么区别? —— Java经典面试题系列
- Java学习笔记之五——关于"equals"和“==”的区别
- java之 “==”,“ equals”,"instanceof"的区别
- java中,字符串String类型的""和null值的区别
- Java中的String str="abc"; String str=new String("abc");和String str = new String();的区别以及==与equals()的不同。
- Java中的String str="abc"; String str=new String("abc");和String str = new String();的区别以及==与equals()的不同。
- java中equals()函数和"=="的区别
- Java 学习笔记-基础-"=="和equals()的区别。
- Java杂谈之String----"=="与equals的区别
- java 中,"=="和 "equals"的区别
- Java中的String str="abc"; String str=new String("abc");和String str = new String();的区别以及==与equals()的不同。
- str == null和str.length == 0 和"".equals(str)之区别
- Java中equals方法和"==”运算符的区别
- JavaSE易错知识点 String 的"equals"和"=="