java的final变量不赋值

阅读: 评论:0

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了局部变量对象

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

展开

本文发布于:2024-02-01 10:01:35,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675289835851.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:赋值   变量   java   final
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23