A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 守护魂 中级黑马   /  2015-12-19 00:19  /  683 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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

4 个回复

正序浏览
好多啊 、晕!
回复 使用道具 举报

                   String s3 = s1 + "c";
                    System.out.println(s3 == s2)

                  String s3 = s1 + "c"; // 这个表达式等价于  String s3 = new  String(s1+"c"); 重新创建了对象  在这个对象初始化这之前 拼接已经完成  地址不同
所以会是  false  String 的equals 比较的是数值 为true
回复 使用道具 举报
houbofly 发表于 2015-12-19 21:58
第五题false是为什么,是因为s1+"c"要转换成ascall码进行计算吗?缓冲拼接字符是什么意思 ...

s1是一个变量, 变量 与 常量 相加 会new 一个新的字符串并返回,也就是说返回了一个新的地址值
== 比较的是地址值  所以是false
回复 使用道具 举报
第五题false是为什么,是因为s1+"c"要转换成ascall码进行计算吗?缓冲拼接字符是什么意思
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马