new char[] { 'a', 'b', 'c', 'd' },“abcd”在不在字符串常量区?

XuanrenLu 2016-03-28 12:54:14
String a = new String(new char[] { 'a', 'b', 'c', 'd' });
String b = a.intern();
if (b == a) {
System.out.println("b被加入了字符串池中,没有新建对象"); // a == b
} else {
System.out.println("b没被加入字符串池中,新建了对象");
}


char c[] = {'a','b','c'};   
String a = new String("abc");
String b = a.intern();

if (b == a) {
System.out.println("b被加入了字符串池中,没有新建对象");
} else {
System.out.println("b没被加入字符串池中,新建了对象"); // a != b
}

...全文
340 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 gjh1328714985 的回复:
参考地址: http://www.cnblogs.com/paddix/p/5326863.html#undefined 1.6与1.7 intern方法貌似有区别,1.6运行都是a!=b 里面一段话:JDK 1.7 后的intern方法在实现上发生了比较大的改变,JDK 1.7后,intern方法还是会先去查询常量池中是否有已经存在,如果存在,则返回常量池中的引用,这一点与之前没有区别,区别在于,如果在常量池找不到对应的字符串,则不会再将字符串拷贝到常量池,而只是在常量池中生成一个对原字符串的引用。 第一种情况是把a堆内存的引用保存到常量池中,a.intern()返回的还是a的引用所以a==b true; 第二种情况由于创建a时"abc"对象保存到常量池中,a.intern()返回的是对"abc"对象的引用 所以a==b false; 参考后的理解,应该是这样吧...
学习了
Goskalrie 2016-04-06
  • 打赏
  • 举报
回复
		String s = new String("1");
	    s.intern();
	    String s2 = "1";
	    System.out.println(s == s2);

	    String s3 = new String("1") + new String("1");
	    s3.intern();
	    String s4 = "11";
	    System.out.println(s3 == s4);
	    
	    String s5 = new String(new char[]{'a' , 'b'});
	    s5.intern();
	    String s6 = "ab";
	    System.out.println(s5 ==s6);
	    //jdk7 false true true
	    //jdk6 false false false
http://tech.meituan.com/in_depth_understanding_string_intern.html
小五丶 2016-04-05
  • 打赏
  • 举报
回复
参考地址: http://www.cnblogs.com/paddix/p/5326863.html#undefined 1.6与1.7 intern方法貌似有区别,1.6运行都是a!=b 里面一段话:JDK 1.7 后的intern方法在实现上发生了比较大的改变,JDK 1.7后,intern方法还是会先去查询常量池中是否有已经存在,如果存在,则返回常量池中的引用,这一点与之前没有区别,区别在于,如果在常量池找不到对应的字符串,则不会再将字符串拷贝到常量池,而只是在常量池中生成一个对原字符串的引用。 第一种情况是把a堆内存的引用保存到常量池中,a.intern()返回的还是a的引用所以a==b true; 第二种情况由于创建a时"abc"对象保存到常量池中,a.intern()返回的是对"abc"对象的引用 所以a==b false; 参考后的理解,应该是这样吧...
wojiaojiadamao 2016-04-03
  • 打赏
  • 举报
回复
咦,这个怎么想数组的值都在堆内存里。 数组在初始化的时候你用到了new关键字,等于就是建立了相应的对象。
Spinach007 2016-04-03
  • 打赏
  • 举报
回复
第二段代码 a b c 和abc又不一样,你知道我想表达什么吗?
XuanrenLu 2016-03-31
  • 打赏
  • 举报
回复
引用 1 楼 zbshibc的回复:
不明所以.你想表达什么。
如题,那样声明char数组之后,"abcd"在不在字符串常量区里面?
丶启示录 2016-03-31
  • 打赏
  • 举报
回复
不明所以.你想表达什么。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧