final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。
引用本身的不变:
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//编译期错误
引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过
可见,final只对引用的“值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至
于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的“值”相等,至于这个地址所指向的对象内容是否相等,==操
作符是不管的。
理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。在多线程的操作
中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它
声明为final,意图使得它“永远不变”。其实那是徒劳的。
分享到:
相关推荐
深入理解 `final` 关键字可以帮助开发者写出更加安全、高效的代码。 首先,`final` 关键字可以用于声明变量。当一个变量被声明为 `final` 时,它的值一旦被赋值后就不能再改变。这适用于成员变量、局部变量以及静态...
在这个学习demo中,我们将深入理解`final`关键字的各种用法及其背后的原理。 首先,`final`关键字用于变量。当一个变量被声明为`final`时,它的值一旦被初始化后就不能再改变。这适用于局部变量、成员变量(包括...
读者将能够理解final关键字的基本定义、用途及作用范围,并且掌握如何在不同的编程场景中合理使用它。此外,文章还探讨了final关键字在构造方法、类、方法以及变量等方面的具体应用,并提出了一些重要的规则与注意...
1. **final关键字** - `final`关键字用于确保变量的值一旦被赋值后就不能改变,或者类和方法不能被进一步扩展。 - 当`final`修饰类时,该类不能被继承,如`final class MyClass {}`,这意味着MyClass不能作为其他...
深入理解final关键字 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。 1.修饰类 当用final修饰...
Java中的`final`关键字是一个非常重要的概念,它用于在...理解`final`关键字有助于编写更加安全、高效和易于维护的Java代码。通过合理地使用`final`,可以防止意外的修改,增强代码的清晰度,并为性能优化提供可能性。
在Java编程中,final关键字扮演着至关重要的角色,它用于声明不可变的变量、方法以及类,以确保代码的稳定性和安全性。以下是关于final关键字的深入解析: 1. **final类**: 当一个类被声明为final时,这意味着这...
理解并熟练掌握多态、final关键字、访问控制权限的使用以及package和import的管理,对于编写高效、可靠的Java程序至关重要。在学习过程中,可以通过观看"154--Java零基础-多态.mp4"和"155--Java零基础-final关键字....
【JavaSE之final关键字与成员变量的类型】 在Java编程语言中,`final`关键字扮演着重要的角色,它表示“最终”或“不可改变”的特性。对于初学者来说,理解`final`的关键字用法是掌握JavaSE基础的重要一步。本篇...
### Final关键字详解 #### 一、Final的基本概念与作用 `final`关键字是Java语言中的一个重要的修饰符,它的含义非常直接——“最终”的意思。它可以在不同的上下文中发挥不同的作用,主要体现在以下三个方面: 1....
在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被...理解并适当地使用`final`可以帮助编写出更加安全、高效且易于维护的代码。在实际开发中,应根据需求灵活运用`final`,确保代码的清晰性和正确性。
四、final关键字 final在Java中有多种用途: 1. **修饰变量**:声明为final的变量一旦赋值后就不能再改变。 2. **修饰方法**:final方法不能被子类重写,确保了行为的一致性。 3. **修饰类**:声明为final的类不能被...
### final关键字在Java中的应用与理解 #### 一、final关键字概述 `final`关键字是Java语言中的一个重要特性,主要用于定义不可变的对象、方法或变量等。通过使用`final`关键字,开发人员能够确保某些实体在初始化...
Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。...理解和熟练运用这两个关键字是Java编程的基础,也是写出高质量代码的关键。
Java中的`final`关键字是一个非常重要的概念,它用于表示不可变性或终结状态。下面我们将详细探讨`final`关键字在修饰变量、方法和类时的不同...理解并恰当使用`final`关键字对于编写健壮、高效的Java代码至关重要。
本篇文章将深入探讨`final`关键字在Java中的使用和重要性,帮助开发者更好地理解和应用这一关键特性。 首先,`final`关键字用于声明变量。当一个变量被声明为`final`时,它的值一旦被初始化,就不能再改变。这在...
Java中的`final`关键字是一个非常重要的概念,它用于在编程中实现不可变性。...理解并正确使用`final`关键字对于编写安全、可维护的代码至关重要。通过深入学习和实践,开发者可以更好地利用这一特性来提高代码质量。
在面向对象的世界里,`final`关键字扮演着一个至关重要的角色。`final`关键字在Java中有着多种用途,包括定义常量、防止类被继承以及阻止方法重写。在本章中,我们将深入探讨`final`关键字的这些关键用法。 首先,`...