常用类之StringBulider 及常见面试题
耗时耗资源 不能出现以上代码
常用类之StringBulider 及常见面试题
直接往后添加 节省空间时间
常用类之StringBulider 及常见面试题String相加的本质也是使用StringBuilder 每次循环产生一个StringBuilder
循环5000次 产生10000个对象
一个是 i对象 一个是 str8+i对象
常用类之StringBulider 及常见面试题
面试题

  1. 下面这段代码的输出结果是什么?

String a = “hello2”;   String b = “hello” + 2;   System.out.println((a == b));

输出结果为:true。原因很简单,“hello”+2在编译期间就已经被优化成"hello2",因此在运行期间,变量a和变量b指向的是同一个对象。

2.下面这段代码的输出结果是什么?

String a = “hello2”;   String b = “hello”; String c = b + 2; System.out.println((a == c));

输出结果为:false。由于有符号引用的存在,所以 String c = b + 2;不会在编译期间被优化,不会把b+2当做字面常量来处理的,因此这种方式生成的对象事实上是保存在堆上的。因此a和c指向的并不是同一个对象。
  3.下面这段代码的输出结果是什么?

String a = “hello2”;   final String b = “hello”; String c = b + 2; System.out.println((a == c));

输出结果为:true。对于被final修饰的变量,会在class文件常量池中保存一个副本,也就是说不会通过连接而进行访问,对final变量的访问在编译期间都会直接被替代为真实的值。那么String c = b + 2;在编译期间就会被优化成:String c = “hello” + 2;
常用类之StringBulider 及常见面试题
常用类之StringBulider 及常见面试题
常用类之StringBulider 及常见面试题
回答一 一个或两个 当常量池存在abc 一个
回答二常用类之StringBulider 及常见面试题
下面这段代码1)和2)的区别是什么?

public class Main {
    public static void main(String[] args) {
        String str1 = "I";
        //str1 += "love"+"java";        1)
        str1 = str1+"love"+"java";      //2)
         
    }
}

1)的效率比2)的效率要高,1)中的"love"+“java"在编译期间会被优化成"lovejava”,而2)中的不会被优化。

在1)中只进行了一次append操作,而在2)中进行了两次append操作。

前面所讲的编译期优化如下
![在这里插入图片描述](https://img-常用类之StringBulider 及常见面试题
并对

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-15
  • 2022-12-23
  • 2022-01-08
猜你喜欢
  • 2021-11-13
  • 2021-05-13
  • 2021-12-21
  • 2021-06-16
  • 2021-06-17
  • 2021-08-23
相关资源
相似解决方案