java笔记整理:String类构造方法、不可变性、常量池

本文介绍了Java中String类的构造方法,包括直接通过字面量创建和使用new关键字创建。重点讲解了常量池的概念,强调字面量字符串会进入常量池以优化内存使用。同时,文章讨论了String的不可变性,说明其一旦创建,属性无法修改,并推荐使用StringBuilder以避免过多临时对象的创建。最后,对比了StringBuilder和StringBuffer的区别,指出StringBuilder是线程不安全但效率更高的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String 类
   String s="hello";          //最常见
   String r=new String("hello");
特殊:
   1、特殊的创建方法   “”创建
   2、为了优化               常量池的概念
 String用的非常多,如果每次都为"hello"创建一个对象,对象非常多
 解决办法:常量池
注意:
1、对于字面量字符串“hello”会进入到常量池,属于优化部分
2、凡是字符串比较,统一用equals,即便==可能也是true
3、new String(...)在堆上创建对象,不会入池
  为了达到优化效果,不要用String s=new String("hello");
                                          写成 String s="hello"
4、非要把堆上的字符串入池
    String s=new String("hello");
  把s指向的对象入池,intern()就会手动入池
String s=new String("hello").intern();

2、不可变对象
   不可以被继承
   String s="hello"; 
   String p=s+"world";    则常量池中有两个对象:“hello”和“hello world”
    (final修饰的类才是不可变的类)

StringBuilder  新版本的只用这个
StringBuffer   老版本

字符串拼接:
java编译器兜底
  
1、String特殊的类
  1、构造方法有特殊性(直接通过“”构造)
  2、入池的概念(String +基本数据类型)常量池
     1、字面量字符串一定入池
     2、可以调用intern()手动入池
2、不可变对象
   一旦被创建,其属性无法被修改
         1、属性引用无法指向其他对象
         2、属性引用指向的对象值无法被修改
         3、无法被继承
3、引用了StringBuilder类(可变对象)
    解决了拼接字符串过程中会创建太多临时性的垃圾对象
  String s="";
  for(int i=0;i<10;i++){s+=i;}    会创建出十一个对象来
====================================
  StringBuilder sb=new StringBuilder();
  for(int i=0;i<10;i++){sb.append(i);}
 sb.toString();      只会有两个对象 sb和i

   为了尽可能的优化,编译器会尝试把能用StringBuilder代替的字符串相加String+String,优化成StringBuilder,但是,作为程序员,不应该过于依赖该特性,直接用StringBuilder
  
StringBuilder    vs     StringBuffer
 新版本                        老版本
 线程不安全的              线程安全的
 效率高                        效率低

常见的构造String的方法
 1、String str ="hello";
 2、String str2 =new String("hello");
 3、char[] array={"a",“b”,"c"};
    String str=new String(array);
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值