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 创建对象问题的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用相同的布局动态创建片段并向它们显示数据?

java Ftp上传创建多层文件的代码片段

创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量。 编写两个构造方法:一个没有(代码片段

Failed to convert property value of type ‘java.lang.String‘ to required type ‘int‘ for property(代码片段

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

11.按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的(代码片段