首页 > 编程语言 > 详细

Java面试题之 String

时间:2016-03-01 02:05:25      阅读:192      评论:0      收藏:0      [点我收藏+]

??????? 有这样一个面试题:

????

String a = "a";
		String a1 = new String("a");
		String a2 = a1.trim() + "";
		String a3 = "a" + "";
		String a4 = "a".trim() + "";
		System.out.println(a == a1);
		System.out.println(a.intern() == a1.intern());
		System.out.println(a2 == a1);
		System.out.println(a3 == a);
		System.out.println(a4 == a);

?请问结果是什么?

?

运行后的结果是:

?

false
true
false
true
false

?为什么结果是这样呢?这需要从String 本身说起。

Java在运行时会维护一个字符串常量池String Pool; 在String a="a"; 首先检查字符串常量池中是否有"a",如果有则直接返回,否则在常量池中创建一个新的;

???? String a1=new String("a"); 使用new 关键字创建的对象一定在堆栈中,同样也会维护字符串常量池,因为字符串常量池中已经存在了,则不会添加新的。在JAVA中==永远都是比较两个内存地址是否相同,这样因为a和a1不是同一个对象则已定返回false;

?? intern()方法时返回字符串常量池中的对象,因为常量池中只存在一个“a” 则两者已定相等;

?? a2.trim()+"" 则是在堆栈中创建了一个新对象,同时维护常量池;则该表达式返回false 但是字符串常量的拼接仅仅维护常量池不会在堆栈中创建新对象则"a"+""还是常量池中的“a”;

?

?

?

?

?

Java面试题之 String

原文:http://wujiu.iteye.com/blog/2279600

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!