java的final变量不赋值_java final 变量 不变的是什么?

摘抄:【final变量的变与不变】:有人说final变量在赋值后就不可变,那么这个不变到底指的是什么呢?这个不变指的是引用,是地址,而所引用的对象的内容仍然是可变的。就是说,这个fi...

摘抄:

【final变量的变与不变】:

有人说final变量在赋值后就不可变,

那么这个不变到底指的是什么呢?

这个不变指的是引用,是地址,而所引用的对象的内容仍然是可变的。

就是说,这个final变量永远指向某个对象,是一个常量指针,而不是指向常量的指针。

这个怎么理解?

我下面的demo可以看出即使定义了final变量,变量还是会被改变。有点懵了

public class B {

B(String a){

System.out.println("init "+a);

}

public static void main(String[] args) {

int i = 0;

while( i < 3) {

final B a = new B(String.valueOf('a'+i));

i++;

}

i = 0;

while( i < 3) {

final int a = i;

System.out.println(a);

i++;

}

}

输出:

init 97

init 98

init 99

0

1

2

有取有给,自问自答:

再次摘抄:这个final变量永远指向某个对象,是一个常量指针,而不是指向常量的指针。

1.final变量被初始化后,不可再被赋值

eg1:

final int a = 1;//a 已经指向了"1"所在的位置,这个指向不能再次被更改

a = 2;//编译报错

eg2:

final A b = new A();//b这个引用已经指向了对象所在的位置,这个指向不能再次被更改

b = new A(); //编译报错,b这个引用不能被赋值。

2.我在提问中的while语句内每次循环重新new对象。

while( i < 3) {

final B b = new B(String.valueOf('b'+i));

i++;

}

为什么这个b能被修改三次呢?

可以将while语句看做三个域各自new了局部变量对象

各个域内的局部变量不相互影响。

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值