Java中关于String类以及字符串拼接的问题

打印 上一主题 下一主题

主题 887|帖子 887|积分 2663

String类部分源码
  1. //被final修饰不可被继承
  2. public final class String
  3.     implements java.io.Serializable, Comparable<String>, CharSequence {
  4.     //String维护char[] 所以不可修改
  5.     private final char value[];
复制代码
创建String对象的方式



  • str1它首先会去方法区的常量池中找,有“hello”这个对象就直接引用,没有就创建一个新的对象“hello”,存放在常量池中。
  • 而new的方式首先会在堆中创建一个对象,然后再去常量池中找,有直接引用,没有就创建一个新的对象“hello”。
两者区别


  • 直接赋值创建0或1个对象,而new的方式创建1或2个对象。
  • 为了提升Java虚拟机的性能和减少内存的开销,避免字符串的重复创建,尽量少使用new的方式创建String对象
代码分析
  1. public static void main(String[] args) {
  2.         String str1 = "hello";//指向常量池中的引用
  3.         String str2 = new String("hello");//指向堆中的引用
  4.         String str3 = str2;//str3==str2 true
  5.         String str4 = "hello";//str1==str4 true
  6.     }
复制代码
字符串拼接
  1. String a="A";
  2. String b="B";
  3. String c=new String("C");
  4. a="A"+b;//变量拼接 指向变为堆中地址
  5. a="A"+c;//变量拼接 指向变为堆中地址!
  6. a="A"+"A";//常量拼接依旧指向常量池中的地址 a=="AA" true
  7. final String d="D";//这是常量
  8. a="A"+d//a=="AD" true
复制代码
+号变量拼接底层原理 StringBuidlerd构造初始化容量为16的char[] 然后调用append()进行拼接 最后将结果new String()的形式赋给左边变量

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表