黑马程序员技术交流社区
标题:
“==”与“equals”练习
[打印本页]
作者:
守护魂
时间:
2015-12-19 00:19
标题:
“==”与“equals”练习
1.判断定义为String类型的s1和s2是否相等
* String s1 = "abc"; //常量池中没有这个字符串对象,就创建一个,如果有直接用即可
* String s2 = "abc";
* System.out.println(s1 == s2); //true
* System.out.println(s1.equals(s2)); //true
2.下面这句话在内存中创建了几个对象?
* String s1 = new String("abc"); //创建两个对象,一个在常量池中,一个在堆内存中
3.判断定义为String类型的s1和s2是否相等
* String s1 = new String("abc"); //记录的是堆内存对象的地址值
* String s2 = "abc"; //记录的是常量池中的地址值
* System.out.println(s1 == s2); ? //false
* System.out.println(s1.equals(s2)); ? //true
4.判断定义为String类型的s1和s2是否相等
* String s1 = "a" + "b" + "c"; //java中有常量优化机制
* String s2 = "abc";
* System.out.println(s1 == s2); ? //true
* System.out.println(s1.equals(s2)); ? //true
5.判断定义为String类型的s1和s2是否相等
* String s1 = "ab";
* String s2 = "abc";
* String s3 = s1 + "c";
* System.out.println(s3 == s2); //false 有缓冲拼接字符串
* System.out.println(s3.equals(s2)); ? //true
作者:
houbofly
时间:
2015-12-19 21:58
第五题false是为什么,是因为s1+"c"要转换成ascall码进行计算吗?缓冲拼接字符是什么意思
作者:
守护魂
时间:
2015-12-20 15:14
houbofly 发表于 2015-12-19 21:58
第五题false是为什么,是因为s1+"c"要转换成ascall码进行计算吗?缓冲拼接字符是什么意思 ...
s1是一个变量, 变量 与 常量 相加 会new 一个新的字符串并返回,也就是说返回了一个新的地址值
== 比较的是地址值 所以是false
作者:
雨来
时间:
2015-12-20 23:07
String s3 = s1 + "c";
System.out.println(s3 == s2)
String s3 = s1 + "c"; // 这个表达式等价于 String s3 = new String(s1+"c"); 重新创建了对象 在这个对象初始化这之前 拼接已经完成 地址不同
所以会是 false String 的equals 比较的是数值 为true
作者:
杨志国
时间:
2015-12-21 21:50
好多啊 、晕!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2