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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gss 中级黑马   /  2015-9-20 23:31  /  1026 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

* 1.判断定义为String类型的s1和s2是否相等
        * String s1 = "abc";
        * String s2 = "abc";
        * System.out.println(s1 == s2);                                        
        * System.out.println(s1.equals(s2));                
* 2.下面这句话在内存中创建了几个对象?
        * String s1 = new String("abc");                       
* 3.判断定义为String类型的s1和s2是否相等
        * String s1 = new String("abc");                       
        * String s2 = "abc";
        * System.out.println(s1 == s2);               
        * System.out.println(s1.equals(s2));
* 4.判断定义为String类型的s1和s2是否相等
        * String s1 = "a" + "b" + "c";
        * String s2 = "abc";
        * System.out.println(s1 == s2);               
        * System.out.println(s1.equals(s2));
* 5.判断定义为String类型的s1和s2是否相等
        * String s1 = "ab";
        * String s2 = "abc";
        * String s3 = s1 + "c";
        * System.out.println(s3 == s2);
        * System.out.println(s3.equals(s2));

17 个回复

倒序浏览
给个答案,看我理解的对不对。thanks
回复 使用道具 举报
收藏了  以后有用的
回复 使用道具 举报
1:true true  因为都指向同一个同一个对象 2:两个对象  “abc”和new 3:false 因为s1代表两个对象s2代表1个对象 true因为equals比较的是内存地址值4:
回复 使用道具 举报
4:true   true  5:false  true     
回复 使用道具 举报
1、true,true
        s1、s2都指向了方法区常量池中的"abc"字符串常量
2、至少一个
        如果创建前“abc”已经存在常量池中,则创建一个对象,否则创建两个对象
3、false,true
        s1指向了堆中new出来的对象,堆中的对象又指向了常量池的"abc"
        s2直接指向了常量池的"abc"。equals()在String类中已重写,比较的是数据内容
4、true,true
        编译器期间,常量会自动组合运算,相当于s1="abc"
5、false,true
        因为s1不是常量,所以编译期间,不会和"c"自动组合。
        s3相当于s3 = new StringBuilder(s1).append("c").toString(),指向的是堆中的对象

点评

gss
写的很对。第二题是2个对象。。堆一个常量池一个。赞一个  发表于 2015-9-21 21:17
回复 使用道具 举报
lanyu 中级黑马 2015-9-21 17:42:38
7#
怎么不讲“==”和“equals”的区别呢
回复 使用道具 举报
棒棒哒!。求答案~
回复 使用道具 举报
gss 中级黑马 2015-9-21 21:15:21
9#
meihua 发表于 2015-9-21 07:45
给个答案,看我理解的对不对。thanks

true true
2个 堆一个,常量池一个
false  true
true  true
false true
回复 使用道具 举报
gss 中级黑马 2015-9-21 21:20:18
10#
Anmyre 发表于 2015-9-21 09:22
收藏了  以后有用的

true true
连个 堆一个,常量池一个
false  true
true  true
false true
这是答案
回复 使用道具 举报
gss 中级黑马 2015-9-21 21:25:21
11#
920792433 发表于 2015-9-21 19:33
棒棒哒!。求答案~

1、true,true
        s1、s2都指向了方法区常量池中的"abc"字符串常量
2两个
   
3、false,true
        s1指向了堆中new出来的对象,堆中的对象又指向了常量池的"abc"
        s2直接指向了常量池的"abc"。equals()在String类中已重写,比较的是数据内容
4、true,true
        编译器期间,常量会自动组合运算,相当于s1="abc"
5、false,true
        因为s1不是常量,所以编译期间,不会和"c"自动组合。
        s3相当于s3 = new StringBuilder(s1).append("c").toString(),指向的是堆中的对象
回复 使用道具 举报
gss 中级黑马 2015-9-21 21:28:50
12#
lanyu 发表于 2015-9-21 17:42
怎么不讲“==”和“equals”的区别呢

==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
回复 使用道具 举报
这些东西看过了  不过回顾一下还是好的
回复 使用道具 举报
Ralap军 发表于 2015-9-21 16:15
1、true,true
        s1、s2都指向了方法区常量池中的"abc"字符串常量
2、至少一个

常量池中如果已经存在了"abc",它是不会再创建对象了,只会在堆中创建
回复 使用道具 举报
大家都很厉害,加油
回复 使用道具 举报
温故而知新
回复 使用道具 举报
gss 发表于 2015-9-21 21:25
1、true,true
        s1、s2都指向了方法区常量池中的"abc"字符串常量
2两个

谢谢亲  嘻嘻~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马