java中被fianl修饰的对象类型的成员变量与基本类型的成员变量

本文详细解析了final关键字在Java中的应用,包括对对象类型和基本类型成员变量的影响,以及如何正确初始化final变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

被fianl修饰的对象类型的成员变量

final修饰的成员变量,其值是不能改变的(这里的值指的是对象的引用)。必须进行初始化。另外,在一般情况下创建对象的时候,系统都是对其成员变量进行默认初始化的,一旦被fianl修饰的成员变量是不会被初始化的

public class FinalDemo {
    //声明对象类型的变量
    final String str;//在编译时会提示The blank final field str may not have been initialized
    //意思是:fianl修饰的字段str未被初始化
    public static void main(String[] args) {
    }
}

初始化的方法有三种
1.直接在变量后直接赋值

final String str = "hello"

2.在构造方法中进行赋值

final String str;
public FinalDemo (){
     str = "hello";
}

3.在代码块中进行赋值

final String str;
{
     str = "hello";
}

PS:如果是在静态代码块中进行初始化赋值,那么该成员变必须要被static修饰

验证被fianl修饰对象类型的成员变量是引用不可变,值可变

public class FinalDemo {
    final StringBuilder str = new StringBuilder("Hello");

    public static void main(String[] args) {
        //创建FinalDemo对象
        FinalDemo demo = new FinalDemo();
        System.out.println("str内容是"+demo.str);
        System.out.println("str的hashCode值是"+demo.str.hashCode());

        //对成员变量str进行追加
        demo.str.append(" China");
        System.out.println("sb的值是"+demo.str);
        System.out.println(demo.str+"的hashCode值是"+demo.str.hashCode());
//      输出结果如下所示

//      str内容是Hello
//      str的hashCode值是1690552137
//      sb的值是Hello China
//      Hello China的hashCode值是1690552137
    }
}

如上所诉:
可以看出StringBuilder中的内容变了 而所指向的哈希编码却没发生变化,在Java中每一个对象都有自己独一无二的哈希编码,根据这个编码就可以找到相关的对象,也就是说,根据这个编码可以独一无二地确定这个对象。
因而使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容是可以改变的。

被fianl修饰的基本类型的成员变量

final修饰基本类型的成员变量时,其值是不能被改变的,也是必须进行初始化。

public class FinalDemo {
     final int a = 5;
    public static void main(String[] args) {
        FinalDemo demo = new FinalDemo();
        demo.a = 6;//The final field FinalDemo.a cannot be assigned
        //意思是:无法赋值被fianl修饰的字段
    }
}

基本数据类型的变量,则其数值一旦在初始化之后便不能改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值