String 创建对象问题

Posted wscy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String 创建对象问题相关的知识,希望对你有一定的参考价值。

# String 创建对象问题

一、String、StringBuffer、StringBuilder区别

  • 都是final类,不可被继承。
  • 对比,如下表:
String StringBuffer StringBuilder
对象类型 字符串常量(由final修饰) 字符串变量 字符串变量
是否线程安全 是(关键方法由synchronized修饰)
执行效率(一般情况)
应用场景 对字符串操作少 多线程、对字符串操作多 单线程、对字符串操作多

二、创建对象

  • String str = new String("hello world");

    在常量池中创建"hello world",并在堆中创建实例对象,返回堆中对象的引用。

  • String str = "hello world";

    在常量池中创建"hello world"。

  • String str = "hello" + " " + "world";

    由于编译器原因,会直接在常量池创建"hello world"。

  • String str1 = "hello"; String str2 = str1 + "world";

    在常量池中创建"hello",创建 StringBuilder 对象,通过 append() 方法加载"hello"。在常量池中创建"world",再通过StringBuilderappend()方法加载"world"。

  • PS:在常量池中创建对象时,首先会对常量池进行搜索。如果常量存在,直接返回对常量的引用;反之,在常量池中创建新的常量,再返回对常量的引用。

三、分析工具 javap

win + r 打开 cmd,进入相应目录,执行:

javac [java]
javap -c [class]    

例,

javac Test.java
javap -c Test

以上是关于String 创建对象问题的主要内容,如果未能解决你的问题,请参考以下文章