码迷,mamicode.com
首页 > 其他好文 > 详细

String 创建对象问题

时间:2018-06-18 01:11:18      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:进入   问题   继承   tps   存在   编译   cmd   实例   直接   

# 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 创建对象问题

标签:进入   问题   继承   tps   存在   编译   cmd   实例   直接   

原文地址:https://www.cnblogs.com/wscy/p/9194199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!