一 概念介绍
1 当使用final修饰基本数据类型时,不能对其重新赋值,不能被改变。
2 当使用final修饰引用类型变量时,它仅仅保证他的地址不变,即一直引用同一个对象,但这个对象完全可以发生改变。
二 final修饰引用类型变量应用
1 代码示例
import java.util.*; class Person { private int age; public Person(){} // 有参数的构造器 public Person(int age) { this.age = age; } // 省略age的setter和getter方法 // age的setter和getter方法 public void setAge(int age) { this.age = age; } public int getAge() { return this.age; } } public class FinalReferenceTest { public static void main(String[] args) { // final修饰数组变量,iArr是一个引用变量 final int[] iArr = {5, 6, 12, 9}; System.out.println(Arrays.toString(iArr)); // 对数组元素进行排序,合法 Arrays.sort(iArr); System.out.println(Arrays.toString(iArr)); // 对数组元素赋值,合法 iArr[2] = -8; System.out.println(Arrays.toString(iArr)); // 下面语句对iArr重新赋值,非法 // iArr = null; // final修饰Person变量,p是一个引用变量 final Person p = new Person(45); // 改变Person对象的age实例变量,合法 p.setAge(23); System.out.println(p.getAge()); // 下面语句对p重新赋值,非法 // p = null; } }
2 运行结果
[5, 6, 12, 9]
[5, 6, 9, 12]
[5, 6, -8, 12]
23
3 结果分析
使用final修饰的引用不能被重新赋值,但可以改变引用类型所引用对象的内容。
相关推荐
在Java编程语言中,`final`关键字有着重要的作用,它能用于修饰类、方法和变量,以限制它们的使用方式。下面将详细解释`final`修饰类、方法和变量的具体含义及其应用场景。 **final 修饰类** `final`修饰类的作用...
在Java编程中,`final`修饰符和类型转化是两个重要的概念,它们分别涉及类的继承限制和对象的类型转换。 1. `final`修饰符: - `final`类:当一个类被声明为`final`时,它无法被其他类继承。这通常用于防止他人...
3. **final修饰局部变量** `final`关键字也可以修饰局部变量,这意味着一旦给局部变量赋值后,它的值就不可改变。例如: ```java public class DemoFinal { public static void main(String[] args) { final ...
final修饰基本类型变量与引用类型变量的区别: * final修饰基本类型变量时,不能对基本变量重新赋值,因为基本类型变量不能被改变。 * final修饰引用类型变量时,仅仅保持的是这个引用所引用的地址不会改变,既一直...
Java 中的 final 变量是指不能被改变的变量,它有三个方面的作用:修饰变量、修饰方法和修饰类。在 Java 中,final 变量是一种常量,它只能被赋值一次,赋值后值不再改变。 final 变量的使用方法有多种,例如在变量...
* final修饰基本类型变量时,不能对基本变量重新赋值,因为基本类型变量不能被改变。 * final修饰引用类型变量时,仅仅保持的是这个引用所引用的地址不会改变,既一直引用同一个对象。但这个对象完全可以改变(对象...
在引用类型变量中,final 关键字可以用于限制变量的指向对象的地址不能被改变,但不影响对象内部的成员变量值的修改。例如: ```java public class FinalDemo2 { public static void main(String[] args) { final...
4. 用 private 修饰的 static 成员变量和成员方法,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很...
这意味着,通过final修饰的引用类型变量,其指向的对象仍然可以发生变化,但是对于引用本身的改变是不允许的。这种用法在希望引用保持不变的情况下非常有用,保证引用本身不会被改变,增加了代码的可读性和稳定性。 ...
3.3 修饰基本类型变量与引用类型变量的区别 修饰基本类型变量时,不能对基本变量重新赋值,因为基本类型变量不能被改变。修饰引用类型变量时,仅仅保持的是这个引用所引用的地址不会改变,既一直引用同一个对象。但...
此外,对于`final`基本类型的局部变量,JVM可能会使用标量替换(Scalar Replacement)优化,直接将变量拆分为其基本组成存储。 6. `final`和多线程: `final`关键字在多线程编程中也有一定作用。虽然`final`变量不...
### Java语言笔记——基本数据类型、变量类型、修饰符、运算符详解 #### 一、Java基本数据类型 Java提供了两种基本的数据类型:内置数据类型和引用数据类型。内置数据类型可以直接存储数值,而引用数据类型则存储...
当final修饰引用类型变量时,该引用不可变,但引用指向的对象内容可以改变。final修饰的方法不能被子类重写,而final修饰的类不能被继承。final修饰的参数对于基本类型的参数无太大意义,但对于引用类型参数来说,...
final 修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器都确保空白 final 在使用之前...
4. **final修饰变量的“宏替换”/“宏变量”问题** 当`final`修饰的变量在编译期间其值就可以确定时,编译器可能会进行优化,将其直接替换为对应的值,而不是变量名。这在字符串拼接中尤为常见,比如: ```java ...
Java 基于 final 修饰数据过程解析 ...它可以修饰基本数据类型和引用数据类型变量,防止它们被修改。但是,对于引用数据类型变量,final 只是防止它指向一个新的对象,而不影响它指向的实际对象。
**一、final修饰变量** 1. **成员变量**:成员变量分为类变量(`static`修饰)和实例变量。对于类变量,可以在声明时直接初始化或在静态初始化块中赋值,两者选其一。实例变量则可以在声明时、非静态初始化块中或...
// final修饰的基本类型变量,只能赋值一次 final int a = 10; a = 20; // 编译错误,不能重新赋值 // final修饰的引用类型变量,只能指向一个对象 final User user = new User(); user = new User(); // ...
* Java 变量:包括基本类型变量和引用类型变量。基本类型变量不能被重新赋值,而引用类型变量可以改变其引用的对象。 * final 变量:final 变量一旦获得了初始值之后就不可改变。final 变量可以修饰类、变量、方法。...