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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© li3N 中级黑马   /  2015-11-11 20:59  /  2279 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以下程序运行后的结果是()
  1. public class Exec8 {
  2.         public static void main(String[] args) {
  3.                 String s1 = "a";
  4.                 String s2 = "b";
  5.                 String s3 = "ab";
  6.                 String s4 = "ab";
  7.                 System.out.println(s3 == s4); //结果为true,享元机制
  8.                 String s5 = "a" + "b";
  9.                 System.out.println(s3 == s5); //结果为true,常量优化机制
  10.                 String s6 = s1 + s2;
  11.                 System.out.println(s3 == s6); //结果为false,两个变量相加
  12.                 String s7 = new String("ab");
  13.                 System.out.println(s3 == s7); //结果为false,s7引用的实体在堆内存中
  14.                 final String s8 = "a";
  15.                 final String s9 = "b";
  16.                 String s10 = s8 + s9;
  17.                 System.out.println(s3 == s10); //结果为true,原理同s3 == s5,被final修饰的变量也是常量,同样享受常量优化机制
  18.         }
  19. }
复制代码

A、false true true false false
B、true false false true false
C、true true false false true
D、false false true false true
答案是D,原因写在注释上了,真的是看一次晕一次……

21 个回复

正序浏览
这是哪里的面试题
回复 使用道具 举报
yubail 中级黑马 2015-11-13 19:39:28
21#
谢谢分享
回复 使用道具 举报
谢谢分享,学习了.
回复 使用道具 举报
yqlbd 中级黑马 2015-11-13 10:37:17
19#
哈哈,这个不错,收藏了。
回复 使用道具 举报
晕菜了!!!
回复 使用道具 举报
受教了,这个还真有不少知识点
回复 使用道具 举报
hbcoding 发表于 2015-11-12 22:01
感觉s3==s7那一个解释的不对啊,其他的引用实体就不在堆内存中吗?

s3是常量,而s7是创建对象,所以必须在堆内存中开辟空间,一个在常量池,一个在堆内存,所以地址值是不相等的
回复 使用道具 举报
石三伢子1 发表于 2015-11-12 13:21
System.out.println(s3 == s6); //结果为false,两个变量相加
为什么会是false?

==判断的是地址值,s1+s2两个变量相加肯定是要先在堆内存开辟空间让它们进行运算,最终的结果是在堆内存中。而s3是常量,在常量池中,所以他么的地址值不相等
回复 使用道具 举报
还好,要慢慢分析
回复 使用道具 举报
感觉有点厉害顶一个
回复 使用道具 举报
晕的不行~~
回复 使用道具 举报
感觉s3==s7那一个解释的不对啊,其他的引用实体就不在堆内存中吗?
回复 使用道具 举报
dsap 中级黑马 2015-11-12 21:39:33
10#
太绕了
回复 使用道具 举报
记得了  谢谢提供
回复 使用道具 举报
领教了....记住咯
回复 使用道具 举报
理解了就不晕咯
回复 使用道具 举报
多看看String的内容就不会晕了
回复 使用道具 举报
System.out.println(s3 == s6); //结果为false,两个变量相加
为什么会是false?
回复 使用道具 举报
看完了,没觉得晕呀,倒是学到新知识了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马