`
cakin24
  • 浏览: 1335867 次
  • 性别: 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修饰的引用不能被重新赋值,但可以改变引用类型所引用对象的内容。

分享到:
评论

相关推荐

    java中final修饰符实例分析

    本文通过实例向我们展示了java中final修饰符的概念,final修饰的基本变量和引用类型变量的区别。有需要的小伙伴可以参考下

    java继承详解

    1、 被final修饰的成员变量,一旦赋值就不能被修改。那么这种变量我们称之为常量: 常量的定义格式: public static final 数据类型 变量名 定义常量的时候,常量的名字要大写,如果存在两个单词组合起来的名字,要...

    初级Java程序员面试题

    final修饰的成员变量,必须在声明的同时赋值,一旦创建不可修改; final修饰的方法,不能被子类重写; final类中的方法默认是final的; private类型的方法默认是final的; java 中的 Math.round(-1.5) 等于多少...

    Java中的final关键字详解及实例

    如果修饰的是引用类型的变量,那么初始化后就不能让他指向另一个对象,如下图所示 2.修饰方法 用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下...

    Java并发学习-AtomicIntegerFieldUpdater字段原子更新类.docx

    只能是可修改变量,不能使final变量,因为final的语义就是不可修改。 对于AtomicIntegerFieldUpdater和AtomicLongFieldUpdater只能修改int/long类型的字段,不能修改其包装类型(Integer/Long)。如果要修改包装...

    Java并发--final关键字.docx

    通常每个类中成员变量可以分为 类变量(static修饰的变量) 以及 实例变量 针对这两种类型的变量赋初始值的时机是不同的。 类变量可以再声明变量的时候直接赋初始值或者在静态代码块中给类变量赋初始值;而实例...

    Java关键字总结

    1>对于基本类型前加以final修饰,表示被修饰的变量为常数,不可以修改。一个既是static有是final的字段表示只占据一段不能改变的存储空间。 2>final用于对象应用时,final使应用恒定不变。一旦引用被初始化指向一个...

    Java经典面试题.pdf

    1.什么是Java的自动装箱和拆箱? 自动装箱是指将基本数据类型转换为对应的包装类对象,以便于在需要使用对象的...修饰变量:被final修饰的变量为常量,不能被修改。 5.什么是Java的异常处理? 异常处理是指在程序执

    Java最全面试题200道

    1、JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含JRE,JDK中有一个名为...当使用final修饰方法时,这个方法将成为最终方法,无法被

    【05-面向对象(下)】

    final修饰基本类型和引用类型 •当使用final修饰基本数据类型时,不能对其重新赋值,不能被改变。 •但对引用类型的变量而言,它仅仅保存的是一个引用,final只能保证他的地址不变,但不能保证对象,所以...

    Java基础【final、权限、内部类、引用类型】

    day11【final、权限、内部类、引用类型】第一章 final关键字1.1 概述1.2 使用方式修饰类修饰方法修饰变量第二章 权限修饰符2.1 概述2.2 不同权限的访问能力第三章 内部类3.1 概述什么是内部类成员内部类访问特点3.2 ...

    java抢红包源码-Java-Interview-Summary:java程序员面试指南,常用面试题汇总解答

    如果修饰的是引用类型变量,那么引用指向的内存地址将不可变,但是引用类型内的属性可以被修改 final 修饰方法,表示该方法不可以被子类重写,但是可以被子类继承使用 finally finally 跟随 try{} 代码块,try{}finally{}...

    JVM常量池教程吐血整理干货.md

    字面量: 字面量分为文本字符串(如: "abc",1等)和用final修饰的成员变量(实例变量和静态变量) 符号引用: 符号引用包括三种:类的全限定名,方法名和描述符,字段名和描述符。 Class文件常量池 运行时常量池 运行时...

    抽象和封装PPT

    3.1.2 final 修饰变量的话说明这个变量是常量 3.2.1 static 可以修饰方法和变量 3.2.2 static 修饰变量的话说明这个变量是类变量 3.2.3 static变量(类变量) 用 类名.变量 或用 对象名.变量名 调用 3.2.4 实例变量 ...

    突破程序员基本功的16课.part2

    5.6.1 原始类型变量的赋值 5.6.2 原始类型带来的擦除 5.6.3 创建泛型数组的陷阱 5.7 正则表达式的陷阱 5.8 多线程的陷阱 5.8.1 不要调用run方法 5.8.2 静态的同步方法 5.8.3 静态初始化块启动新线程执行初始...

    JavaLearnSummary:java学习总结

    JavaLearnSummary java学习总结 ...Ø final修饰局部变量:系统不会为局部变量进行初始化,局部变量必须有程序员显示初始化。因此使用final修饰局部变量时,既可以在定义时指定默认值(后面的代码不能再对变

    Java面试宝典

    10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 11 12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法...

    Java性能优化

    尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度的重用对象,最好能用基本的数据类型或数组来替代...

    java面试真题整理

    栈内存:基本数据类型的变量,方法的返回值,对象的引用(对象的引用地址) 3.static:存放在静态域中和类属于同一个属性,修饰的方法:类名.static 4.Java多态的体现方式方法的重载,重写,对象的多态性 1.编译时...

Global site tag (gtag.js) - Google Analytics