【Java面试题】2 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析

问题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
答:
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

public class Test {
    // final修饰基本类型的变量
    public static final char CHAR = '中';
    // final修饰引用类型的变量
    public static final StringBuffer a = new StringBuffer("StringBuffer");

    public static void main(String[] args) {
        // 编译报错,引用不能变  The final field Test.a cannot be assigned
        //a = new StringBuffer("hehe");
        // 引用变量所指向的对象中的内容还是可以改变的
        System.out.println(a);
        a.append("xxx");
        System.out.println(a);
    }

    public static int method1(final int i) {
        // i = i + 1;// 编译报错,因为final修饰的是基本类型的变量
        return i;
    }

    // 有人在定义方法的参数(引用变量)时,可能想采用如下的形式来阻止方法内部修改传进来的参数对象,
    // 实际上,这是办不到的,在该方法内部任然可以增加如下代码来修改参数对象
    public static void method2(final StringBuffer buffer) {
        buffer.append("buffer");// 编译通过,因为final修饰的是引用类型的变量
    }
}

运行结果:

StringBuffer
StringBufferxxx

由此说明使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,687评论 0 11
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,142评论 0 62
  • 1、.java源文件: 一个以”.java“为后缀的源文件:只能有一个与文件名相同的类,可以包含其他类。 2、类方...
    Hughman阅读 1,518评论 1 9
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,366评论 11 349