`
cakin24
  • 浏览: 1396597 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

final修饰基本类型变量和引用变量区别

    博客分类:
  • java
阅读更多

一 概念介绍

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修饰的引用不能被重新赋值,但可以改变引用类型所引用对象的内容。

分享到:
评论

相关推荐

    final修饰类

    在Java编程语言中,`final`关键字有着重要的作用,它能用于修饰类、方法和变量,以限制它们的使用方式。下面将详细解释`final`修饰类、方法和变量的具体含义及其应用场景。 **final 修饰类** `final`修饰类的作用...

    final修饰符与类型转化

    在Java编程中,`final`修饰符和类型转化是两个重要的概念,它们分别涉及类的继承限制和对象的类型转换。 1. `final`修饰符: - `final`类:当一个类被声明为`final`时,它无法被其他类继承。这通常用于防止他人...

    JavaSE之final关键字与成员变量的类型

    3. **final修饰局部变量** `final`关键字也可以修饰局部变量,这意味着一旦给局部变量赋值后,它的值就不可改变。例如: ```java public class DemoFinal { public static void main(String[] args) { final ...

    java工程师面试总结.pdf

    final修饰基本类型变量与引用类型变量的区别: * final修饰基本类型变量时,不能对基本变量重新赋值,因为基本类型变量不能被改变。 * final修饰引用类型变量时,仅仅保持的是这个引用所引用的地址不会改变,既一直...

    java final变量详解

    Java 中的 final 变量是指不能被改变的变量,它有三个方面的作用:修饰变量、修饰方法和修饰类。在 Java 中,final 变量是一种常量,它只能被赋值一次,赋值后值不再改变。 final 变量的使用方法有多种,例如在变量...

    java工程师面试总结.docx

    * final修饰基本类型变量时,不能对基本变量重新赋值,因为基本类型变量不能被改变。 * final修饰引用类型变量时,仅仅保持的是这个引用所引用的地址不会改变,既一直引用同一个对象。但这个对象完全可以改变(对象...

    day11【final、权限、内部类】1

    在引用类型变量中,final 关键字可以用于限制变量的指向对象的地址不能被改变,但不影响对象内部的成员变量值的修改。例如: ```java public class FinalDemo2 { public static void main(String[] args) { final...

    java中final和static的区别

    4. 用 private 修饰的 static 成员变量和成员方法,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很...

    final关键字详细解读

    这意味着,通过final修饰的引用类型变量,其指向的对象仍然可以发生变化,但是对于引用本身的改变是不允许的。这种用法在希望引用保持不变的情况下非常有用,保证引用本身不会被改变,增加了代码的可读性和稳定性。 ...

    java工程师找工作中面试遇到的专业知识问题总结.docx

    3.3 修饰基本类型变量与引用类型变量的区别 修饰基本类型变量时,不能对基本变量重新赋值,因为基本类型变量不能被改变。修饰引用类型变量时,仅仅保持的是这个引用所引用的地址不会改变,既一直引用同一个对象。但...

    java中final修饰符的使用方法

    此外,对于`final`基本类型的局部变量,JVM可能会使用标量替换(Scalar Replacement)优化,直接将变量拆分为其基本组成存储。 6. `final`和多线程: `final`关键字在多线程编程中也有一定作用。虽然`final`变量不...

    java语言笔记包括基本数据类型、变量类型、修饰符、运算符等

    ### Java语言笔记——基本数据类型、变量类型、修饰符、运算符详解 #### 一、Java基本数据类型 Java提供了两种基本的数据类型:内置数据类型和引用数据类型。内置数据类型可以直接存储数值,而引用数据类型则存储...

    java关键字总结

    当final修饰引用类型变量时,该引用不可变,但引用指向的对象内容可以改变。final修饰的方法不能被子类重写,而final修饰的类不能被继承。final修饰的参数对于基本类型的参数无太大意义,但对于引用类型参数来说,...

    final和static用法详解JAVA

    final 修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器都确保空白 final 在使用之前...

    Java final 修饰符知识点总结(必看篇)

    4. **final修饰变量的“宏替换”/“宏变量”问题** 当`final`修饰的变量在编译期间其值就可以确定时,编译器可能会进行优化,将其直接替换为对应的值,而不是变量名。这在字符串拼接中尤为常见,比如: ```java ...

    Java基于final修饰数据过程解析

    Java 基于 final 修饰数据过程解析 ...它可以修饰基本数据类型和引用数据类型变量,防止它们被修改。但是,对于引用数据类型变量,final 只是防止它指向一个新的对象,而不影响它指向的实际对象。

    Java并发--final关键字.docx

    **一、final修饰变量** 1. **成员变量**:成员变量分为类变量(`static`修饰)和实例变量。对于类变量,可以在声明时直接初始化或在静态初始化块中赋值,两者选其一。实例变量则可以在声明时、非静态初始化块中或...

    11【final、权限、内部类】1

    // final修饰的基本类型变量,只能赋值一次 final int a = 10; a = 20; // 编译错误,不能重新赋值 // final修饰的引用类型变量,只能指向一个对象 final User user = new User(); user = new User(); // ...

    java工程师找工作中面试遇到的专业知识问题总结.pdf

    * Java 变量:包括基本类型变量和引用类型变量。基本类型变量不能被重新赋值,而引用类型变量可以改变其引用的对象。 * final 变量:final 变量一旦获得了初始值之后就不可改变。final 变量可以修饰类、变量、方法。...

Global site tag (gtag.js) - Google Analytics