Java final常量赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java final常量赋值相关的知识,希望对你有一定的参考价值。

final 不是 一但给值就不能在改变了, 可这行代码怎么能执行,希望专家能给出结论,
最好说一下原理、
先谢谢了

public class admin
String name;
public admin(String name)
this.name=name;


class test
public static void main(String []args)
final admin ad=new admin("Hello");
ad.name="偶偶";
ad.name="亚亚";
System.out.print(ad.name);

你现在ad的值是指向new admin("Hello");,final的值是对new admin("Hello");
对象的引用,你不能改变引用的值,就是说,你不能
ad=new admin("Hello too");这样写,
你只是改变应用中的东西有没有关系。
就好比你父亲生了一个你,你的省份证号码就不能改变了,这个身份证号码就好像是一个引用,能唯一确认是你,但是你的名字可以改,衣服可以换啊追问

那个我明白了。我发现有个地方我没有明白。就是
去掉this
为什么执行为null?

public class admin
String name;
public admin(String name)
name=name;


class test
public static void main(String []args)
//final
admin ad=new admin("Hello");
ad.name="偶偶";
ad.name="亚亚";
ad=new admin("fdsa");
System.out.print(ad.name);

追答

this引用的全局变量,直接写就是引用局部变量了哦,你的方法名后面所传的参数和全局变量同名了,按照就进原则,public admin(String name)
name=name;

这句话毫无意义,要么你用this来强调你前面用的是全局的变量,就是上面定义的那个,要么,你就别重名了啊,把方法名内的改个名字也行

参考技术A 你final的只是指向admin 的一个引用地址 但是 admin 类本身不是final的。
你可以把admin的name属性改为final的。
再说 你用final修饰类只是类不能被继承,但是其属性还是String类型的,是允许被修改的。
参考技术B final修改的常量值不能改变,但是现在final修饰的是对象。所以情况不一样了

以上是关于Java final常量赋值的主要内容,如果未能解决你的问题,请参考以下文章

在Java中是否只有加了final才是常量?

Java中哪个关键字可以表示常量

Java常量

Java关键字final和static的作用

java 常量啥怎么定义的?

java中如何定义常量