java不可变对象和字符串

不可变对象
-一旦创建,这个对象的状态和值就不能被更改
-其内在的成员变量就不能修改
-八个基本类型的包装类
-String,BigInteger和BigDecimal
可变对象
普通对象

1、对象函数调用都是传指针
2、不可变对象也是传指针
3、由于不可变,临时变量指向新内存外部实参的指针不改动

如何创建不可变对象
1、immutable对象是不可改变,有改变请clone或者new一个对象进行修改
2、所有的属性都是final和private
3、不提供setter方法,外部不能通过此方法来修改里面的值
4、类是final的,或者此类所有的方法都是final
5、类中包含mutable对象,那么放回拷贝需要深度clone

不可变对象优点
1、只读,线程安全
2、并发读,提高性能
3、可以重复使用
缺点
制造垃圾浪费空间
对不可变对象进行修改时,会开辟新的空间,旧对象就会被搁置,直到垃圾回收

java字符串
1、字符串是java使用最多的类,是一种典型的不可变对象
2、String定义有2种
String a = “abc”;// 常量赋值,栈分配内存
String b = new String(“abc”)//new对象,堆内存分配
3、字符串比较:equal方法
4、是否指向同一个对象:指针比较==

java常量池(Constant Pool)
1、保存在编译器件就已经确定的数据
2、是一块特殊的内存
3、相同的常量字符串只存储一份,节省内存,共享访问

字符串的加法
1、String a = “abc”,a = a + “def” 由于String不可修改,效率差
2、使用StringBuffer或者StringBuilder类的append方法进行修改
3、StringBuffer或者StringBuilder的对象都是可变对象
4、StringBuffer(同步,线程安全,修改快速)
5、StringBuilder(不同步,线程不安全,修改更快)
6、在程序运行当中,如果需要大量的字符串加法操作,建议使用StringBuffer或StringBuilder

可变对象和不可变对象传递参数的区别
/**

  • @author ppf
  • @create 2020/08/05/21:12
    */
    public class ChangeValue {
    public static void change(int a){
    a = 10;
    }
    public static void change(String a1){
    a1 = “def”;
    }
    public static void change(StringBuffer a1){
    a1.append(“def”);
    }
    public static void main(String[] args){
    int a = 5;
    String b = “abc”;
    StringBuffer c = new StringBuffer(“abc”);
    change(a);
    change(b);
    change©;
    System.out.println(a); //5
    System.out.println(b); //abc
    System.out.println©; //abcdef
    }
    }
    1、当函数参数是基本变量时,是传值的
    2、实参a = 5.形参a =5,a=10后形参的a=10,实参a是不变的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值