黑马程序员技术交流社区
标题: 看程序,写结果 [打印本页]
作者: 小地瓜 时间: 2015-11-13 18:23
标题: 看程序,写结果
1. 下面程序的运行结果是( )
String s1 = “abc”;
String s2 = new String(“abc”);
System.out.println(s1==s2);
String s3 = “你好吗”;
String s4 =”你”;
String s5 =”好吗”;
System.out.println(s3==(s4+s5))
a) true true
b) false true
c) true flase
d) false false
并且写出答案的原因。
作者: 杨凯瑞 时间: 2015-11-13 19:31
我不会啊 ! 选c 吧
作者: 大自然的搬运工 时间: 2015-11-13 19:43
D
String a = "aa"+"bb";
String b = "aabb";
a==b //true
作者: keaitao0321 时间: 2015-11-13 20:26
本帖最后由 keaitao0321 于 2015-11-13 20:47 编辑
B S2创建了对象。S4 S5先进行字符串拼接,拼接完成再返回,它的地址值和S3是一样的
错了应该是D 都是false 如果是System.out.println(s3==“你”+“好吗”) 则是true
作者: 唯我独赞mo 时间: 2015-11-13 20:45
应该是D,s4和s5拼接之后得到了一个新串,地址值和s3并不一样
作者: Sayman 时间: 2015-11-13 21:22
D 都不一样
作者: tf0612 时间: 2015-11-13 21:28
选B。S1是存储在静态常量池中的,而S2是创建的另一个对象,所以S1 != S2;S3和S4都是在静态常量池中的字符串,而且是一样的
作者: young_ants 时间: 2015-11-13 21:47
选D
String s1 = “abc”; //常量,存放在常量池中,s1的地址也指向常量池
String s2 = new String(“abc”); //new出来的是一个地址,"abc"常量也是一个地址,这句话创建了两个对象
System.out.println(s1==s2); //所以地址不一样
String s3 = “你好吗”;
String s4 =”你”;
String s5 =”好吗”;
System.out.println(s3==(s4+s5)) //s4 s5分别是变量,变量在编译时不能肯定其值,所以s3和他们的地址值是不一样的
这里比较的均是地址值,多以都返回false
作者: wwwgaoxi 时间: 2015-11-13 22:20
应该选C是吧??
作者: 18273250088 时间: 2015-11-13 22:28
String s1 = “abc”;
String s2 = new String(“abc”);
System.out.println(s1==s2);
是false 因为是两对象 比较的是地址
String s3 = “你好吗”;
String s4 =”你”;
String s5 =”好吗”;
System.out.println(s3==(s4+s5))
是false S3是常量 而S4+S5是要在堆内存中进行运算 引用类型跟常量比较肯定是false
作者: 刘旭波 时间: 2015-11-13 22:39
D,S1是一个对象,S2是2个对象,地址值不同,S4+S5 又是一个对象,地址值都不同
作者: xiao15779706 时间: 2015-11-14 13:53
本帖最后由 xiao15779706 于 2015-11-14 13:55 编辑
应该选b吧 第一个一个在字符串常量池 一个新建的 地址值不一样 一二个两个都在字符串常量池
作者: 小地瓜 时间: 2015-11-16 00:29
然后怎么说明,中文呢?
作者: 小地瓜 时间: 2015-11-16 00:31
貌似不是这样,问了老师,说是“你好”+ “吗”是在堆内存中完成的,最好是将堆内存的地址值赋给了S2
作者: 小地瓜 时间: 2015-11-16 00:32
点赞,解释的不错,亲们是在哪个校区呢
作者: 小地瓜 时间: 2015-11-16 00:34
赞!帅哥是哪个校区的?
作者: 小地瓜 时间: 2015-11-16 00:35
正确的答案是 D
作者: JYcainiao 时间: 2015-11-16 16:17
选D s1 s2一个是常量池的地址 一个是堆内存的地址 肯定不一样 false s3 s4 s5都是常量吃中的,但是s4+s5是变量在进行运算,会另外开辟一块空间进行调用常量池的内容 但== 对比的是地址值 所以也是false
作者: hansnowqiang 时间: 2015-11-16 22:06
本帖最后由 hansnowqiang 于 2015-11-16 22:12 编辑
D s1反映的是方法区中常量池的地址,s2是在堆中的new出来的地址 所以falses3、s4、s5虽然都指向常量池中,但是在做s4+s5时是变量 ,变量运算是先开空间再做运算。
如果是 System.out.println(s3==“你”+“好吗”);输出就是true。因为“你”“好吗”是在常量池中的常量。
作者: young_ants 时间: 2015-11-17 13:25
北京这边的,你呢?
作者: yqlbd 时间: 2015-11-17 15:31
第一个false,第二个false;字符串池原理,只会出现一个相同实例。
作者: z940505 时间: 2015-11-17 21:26
选D,s1是对常量池中的字符串的引用,s2是对堆内存中创建的对象的引用,地址值不同
s3指向的是常量池中的“你好吗”这个对象,而s4、s5分别指向 “你”和"好吗"这两个对象,s4和s5地址值相加并不等于s3的地址值。所以选D
作者: 迷茫不堪的年纪 时间: 2015-11-17 23:04
D , ==比较的值, 如果是 s1 equals(s2)的话就是true,当前 false 第二个我认为是常量池中都是新的,最后生产新的字符串, 所以也是假的. 睡觉了
作者: 路人_WsL2I 时间: 2015-11-17 23:16
远d,很简单。知道原理很容易理解
作者: 小地瓜 时间: 2015-11-18 00:49
我在长沙这边,北京那边是什么样的教学模式??
作者: sufutian 时间: 2015-11-18 18:41
选d都是比较地址。我真聪明
作者: 13533258481 时间: 2015-11-18 21:38
学习了
作者: 幻之记忆 时间: 2015-11-18 22:54
简单,选d,老师讲过这种类型的题目,弄明白了就简单了
作者: ppaapc 时间: 2015-11-18 23:03
有点意思
作者: young_ants 时间: 2015-11-18 23:25
我选的是双元课堂。
作者: ll5353231 时间: 2015-11-18 23:32
了解一下
作者: 申请补助没成功 时间: 2015-11-18 23:45
学习了,马克一记
作者: 小地瓜 时间: 2015-11-19 00:15
你是在哪个校区呢?
作者: 小地瓜 时间: 2015-11-19 00:16
有什么好的思想,多留言沟通噢
作者: 袁有福123 时间: 2015-11-19 21:33
应该是d 前面一个是直接赋值 后一个是new了一个对象 两者肯定不会等于 第二个 字符拼接也存在问题
作者: 小笨笨天 时间: 2015-11-19 22:30
无语 明明都不确定 为什么不先去敲敲 试下 考虑下 在来回答别人
作者: pl8236448 时间: 2015-11-19 22:32
错了,在静态常量池中的是表达式右边的字符串,而表达式的左边的s1,s2,s3都是变量
作者: pl8236448 时间: 2015-11-19 22:33
选D.都是错的
作者: 小地瓜 时间: 2015-11-20 00:20
作者: nice非飞 时间: 2015-11-20 00:54
选D,“abc”在内存中占用了地址值,而new String("abc");在内存中又开了一个内存,多了另外的地址值,==号判断的是地址值,故不相等。。而“你好吗”这个字符串的引用s3,s4想加又是另外一回事,他们调用了StringBuffer缓存区来进行想加,那么地址值跟s5相比也就不一样了
作者: yubail 时间: 2015-11-20 10:36
我只是来顶帖的
作者: 洛荣神川 时间: 2015-11-20 13:21
选D
但是两个字符串变量相加返回是什么呢
作者: 木易延 时间: 2015-11-20 14:18
D 这里比较的均是地址值,多以都返回false
作者: Aaron_wang 时间: 2015-11-20 17:11
秒选,D
作者: 一个人走天下 时间: 2015-11-20 17:15
选D
第一题 一个指向变量池一个指向堆里的地址
第二题 虽然都指向变量池但S3里的S4S5是变量不确定
作者: mlxg 时间: 2015-11-20 17:19
选D。具体的你去看看老师的视频,我不擅长表达
作者: Mr.Ar.Rn 时间: 2015-11-20 18:07
选D 都是false
作者: silentCat 时间: 2015-11-20 18:35
c,s1与s2对应的地址值是相同的,s3与s4对应不是一个对象,地址值不同
作者: dai2686779 时间: 2015-11-20 19:41
66666666666666666666666666
作者: 半指流沙 时间: 2015-11-20 21:24
............................................
作者: 晚睡晚起的 时间: 2015-11-20 21:43
D,第二个是变量相加
作者: zqiang 时间: 2015-11-20 21:51
选D.==比较的是地址值.
作者: 一江夜雨 时间: 2015-11-20 22:51
答案应该是 D:
String s1 = “abc”; //"abc", 存放在常量池中,s1的地址也指向常量池;
String s2 = new String(“abc”); // new出来的是一个地址,"abc"常量也是一个地址,这里同事创建了两个对象;
System.out.println(s1==s2);
因为是两对象 比较的是地址,所以是false
String s3 = “你好吗”;
String s4 =”你”;
String s5 =”好吗”;
System.out.println(s3==(s4+s5))
S3是常量 而S4+S5是引用类型,传递的是地址值
引用类型跟常量比较肯定是false
作者: 超级宝贝乐爷 时间: 2015-11-20 23:19
不会咋办!!!!!!!!!!!!!!
作者: 小地瓜 时间: 2015-11-21 00:06
给赞!给赞!给赞!给赞!给赞!
作者: Tmac90301 时间: 2015-11-21 20:40
答案是c
作者: 小地瓜 时间: 2015-11-21 21:00
结婚了?
作者: 小地瓜 时间: 2015-11-21 21:02
慢慢来,慢慢会的
作者: 森然 时间: 2015-11-21 22:29
b ........好火
作者: 小地瓜 时间: 2015-11-22 00:04
多谢顶贴,呵呵,这是传说中的美女效应?哈哈,你在哪里呢,我在长沙这边
作者: 森然 时间: 2015-11-22 18:27
你是那期的啦
作者: 小地瓜 时间: 2015-11-23 00:08
{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}{:2_32:}
作者: 隔壁马良 时间: 2015-11-23 00:48
都理解的很透彻啊
作者: 木易延 时间: 2015-11-23 08:36
我还没有学到那里,赞一个
作者: hrfhwy 时间: 2015-11-23 20:10
d,地址不一样
作者: 33期1113刘传政 时间: 2015-11-23 22:32
选d.我稍微有点会
作者: xiang2713 时间: 2015-11-23 22:36
d 这还限制
作者: paulchoi1 时间: 2015-11-23 22:47
加油加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |