每天三道面试题2019-09-18

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/HardToFindName/article/details/101001975

1、使用"“和new String(”")创建String对象的区别

1、使用"“创建的String对象时,jvm会先判断在字符串常量池中是否存在相同值得字符串,如果存在,则返回该字符串在字符串常量池中的地址,否则在常量池中创建字符然后返回地址;
2、使用new String(”")创建字符串时,也会先去字符串常量池中判断有无相同值得字符串,如果没有,则先在常量池中创建一个这样的字符串,然后再在堆中创建一个对象,返回对象在堆中的地址;如果常量池中有,则直接在堆中创建对象,返回堆中的地址。

2、使用+操作符和StringBuilder中的append()方法拼接字符,哪个性能好?

使用+操作符拼接字符串,经过反编译后显示使用的是StringBuilder的append()方法对字符串进行拼接,如:

String s = “a” + "b";

最后会变成

String s = new StringBuilder("a").append("b").toString();

此时在性能上两者没有差别。

但是如果使用循环赋值,如:

String s = "";
for(int i = 10; i < 10; i++){
	s += i;
}

最后会变成

String s = "";
for(int i = 10; i < 10; i++){
	s = new StringBuilder(s).append(i).toString();
}

由此可见,没经过一次遍历都会产生一个新的StringBuilder对象,这样会浪费更多的资源和消耗更多的性能。

所以在性能上,使用StringBuilder的append方法会好些(不可和+混用,否则没有意义),但是对于代码的可读性而言,使用+操作符更加妥当。

3、java中的基本类型数据有哪些,各占几个字节?

1个字节:byte、boolean
2个字节:short、char
4个字节:int、float
8个字节:long、double

猜你喜欢

转载自blog.csdn.net/HardToFindName/article/details/101001975