不变性与final的用法

1、不变性

如果一个对象被创建之后状态就不能被修改就具有不变性,具有不变性的对象一定是线程安全的。

2、final修饰变量

属性被声明为final后只能被赋值一次,一旦被赋值就不能修改

(1)final修饰的是是基本类型的数据,就表示这个数据不能变

(2)final修饰的是对象引用,该引用的指向不能变(不能指向其他对象),但指向的对象的属性(内容)是可以变的

(3)final修饰的变量是类的一般属性时赋值的时机:变量声明时等号右边,构造函数中,

初始化代码块中

(4)final修饰的变量是类的static属性时赋值的时机:变量声明时等号右边,静态代码块中,不能在构造函数中

(5)final修饰的变量是方法中的临时变量赋值的时机:在使用前赋值即可

3、final修饰方法

(1)不能修饰构造方法

(2)修饰的方法不能被重写

4、final修饰类

修饰的类不能被继承,如String类

5、实例:

代码:

 运行结果:

 

分析:

(1)在类的加载过程中:运行第6行时会在方法区的常量池中创建字面量“wukong”,同时在堆中创建对应的String对象A,字面量“wukong”会指向堆中的对象

(2)在类的加载过程中:运行第8行时会在方法区的常量池中创建字面量“wukong2”,同时在堆中创建对应的String对象B,字面量“wukong2”会指向堆中的对象

(3)在运行中,运行到第五行时回去检查常量池中是否存在字面量“wukong2”,发现是存在的,此时a直接指向B

(4)同理b指向A,d指向A.

(5)字符串常量相加,jvm 会进行优化,不会创建 StringBuilder 对象,字符串变量加上常量,会创建 StringBuilder 对象,然后调用 append 方法,因此c是直接指向B的,而e会在堆中创建一新的对象C,对象C的内容与字面量“wukong2”指向的对象B相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值