`
beefcow
  • 浏览: 44689 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java关键字Final的变与不变

阅读更多

     

     Final 修饰字段时,之前一个模糊的概念是它使变量不可变,然而下面的情况呢?

     可以看见,被 final 修饰后,变量还是改变了,何以如此?见注释。 

 

 

package javaDetail.finalKeyWord;

public class AboutFinal {

	// here we use the final key word,but find that it still can be changed.
	static final StringBuffer sb = new StringBuffer("hello,world");

	/**
	 * you will find that sb's value has been changed,why,isn't it that the
	 * variable "sb" is final,and can not be changed.
	 * <p>
	 * "final" 's effect on reference type is :we keep the variable's reference
	 * unchangeable(it always point to the same place in memory),while,as for
	 * the object it referred to,we can't promise that it will not change.
	 * <p>
	 * so,here the thing that has been changed is the object this
	 * pointer(variable,I think in java,reference type variable is quite like
	 * pointer) point to.The variable it self,has not been changed.
	 * <p>
	 * while,if you try to change the final variable(as the line that has been
	 * commented try to do),you will get the error : The final field Final.sb
	 * cannot be assigned.
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// sb = new StringBuffer("hello,world");
		sb.append("hello,world");

		System.out.println(sb);//the result is :[hello,worldhello,world] do not you feel surprised?
	}
}

 

 

        实际上是:

        final 修饰Object时,只能确保引用不变,即至始至终指向同一片内存单元(好像指针啊),有点从一而终的意思,但要命的是,不能保证我指向的那家伙就会不变,这儿就是如此,我始终指向的是那一处不错,可是那儿的StringBuffer的值 却变了,那也是没办法的事情。

 

    另外注意main()函数中被注释掉的第一行

                         //sb = new StringBuffer("hello,world");

    它试图让sb指向另一处地址,这就是试图修改sb的指向了,那怎么能行?试一下,发现确实不行,会有编译错误。

 

 

 

 

2
3
分享到:
评论

相关推荐

    深入理解Java中的final关键字_动力节点Java学院整理

    了解这些 `final` 关键字的知识点对于编写高效、安全的 Java 代码至关重要,特别是在设计不可变类和保证代码行为不变性时。通过正确使用 `final`,开发者可以增强代码的可维护性,减少潜在的错误,并提升程序的整体...

    Java中的final关键字

    - 对于对象引用,`final`关键字并不保证对象内的状态不可变,仅保证引用本身不变。因此,对于复杂对象,如果需要确保对象状态不可变,还需要配合不可变对象的设计原则。 总的来说,`final`关键字是Java中的一种强...

    Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口

    Java中的`final`关键字、抽象类和接口是面向对象编程中的核心概念,它们共同构建了类的层次结构和多态性。以下是对这些概念的详细解释: 1. **final关键字** - `final`关键字用于确保变量的值一旦被赋值后就不能...

    浅析Java中的final关键字Java开发Java经验技

    在Java编程语言中,`final`关键字扮演着一个至关重要的角色,它被广泛用于定义不可变对象、常量以及固定行为。本篇文章将深入探讨`final`关键字在Java中的使用和重要性,帮助开发者更好地理解和应用这一关键特性。 ...

    浅析对Java关键字final和static的理解

    总结来说,`final`和`static`关键字在Java中扮演着关键角色,`final`用于保证不变性和防止覆盖,而`static`用于定义类级别的成员,简化访问和管理。理解并正确使用这两个关键字对于编写高效、可维护的Java代码至关...

    Java零基础-final关键字.md

    - 进一步了解与final关键字相关的高级主题,如不可变类和Enum枚举等内容。 - 参考Java官方文档或技术论坛,以解决任何疑问并深入理解final关键字的使用。 通过上述内容的学习和实践,读者不仅能够熟练掌握final...

    举例讲解Java中final关键字的用法

    Java中的`final`关键字是一个...总结来说,`final`关键字在Java中扮演着确保数据不变性和控制继承的角色,帮助开发者维护代码的稳定性和安全性。理解并恰当使用`final`关键字对于编写健壮、高效的Java代码至关重要。

    关键字Final

    在Java编程语言中,`final`关键字扮演着非常重要的角色,它有多种用途,用于创建不可改变的对象、变量和类。下面将详细讲解`final`关键字的五种主要使用方式。 1. **常量(Final Variables)** `final`关键字可以...

    java final关键字(基础)(csdn)————程序.pdf

    在Java编程中,使用`final`关键字能够帮助我们确保某些代码的行为是不可变的,从而增加代码的稳定性和安全性。 1. **final变量** - **成员变量**:当`final`修饰类的成员变量时,它必须在构造函数执行完毕前被初始...

    Java中final的深度剖析

    Java中的final关键字是一个非常重要的修饰符,它用于声明变量、方法和类,确保它们在程序执行期间保持不变。final关键字在Java编程中的应用广泛,可以帮助提高代码的稳定性和可维护性。 1. **常量的声明** final...

    有关Java中关键字final的理解

    通常,这类常量数据都是基本类型的数据,并赋予关键字final,同时在对此常量定义时需要进行赋值。  值得注意的是:对于基本类型,使用final关键字将使数值恒定不变;而对于对象引用,final则是使引用恒定不变。...

    final关键字详细解读

    final关键字是Java语言中的一个基本概念,它用于限制类、变量、方法以及引用的修改和扩展。final关键字的主要作用是告诉编译器该元素是最终的,不可变的。对于初学者来说,掌握final关键字的使用可以帮助编写出更加...

    浅谈Java中的final关键字与C#中的const, readonly关键字

    本文将深入探讨Java中的`final`关键字以及C#中的`const`和`readonly`关键字,了解它们如何分别实现编译时常量和运行时不可变性。 ### Java中的`final`关键字 #### 1. 编译器常量 在Java中,`final`关键字可以用来...

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

    【JavaSE之final关键字与成员变量的类型】 在Java编程语言中,`final`关键字扮演着重要的角色,它表示“最终”或“不可改变”的特性。对于初学者来说,理解`final`的关键字用法是掌握JavaSE基础的重要一步。本篇...

    Java并发--final关键字.docx

    Java中的`final`关键字在编程中扮演着重要的角色,它可以用于修饰变量、方法和类,确保被修饰的内容在特定条件下不可变。以下将详细阐述`final`关键字在不同场景下的应用及其特点。 **一、final修饰变量** 1. **...

    Java-关键字final详解(public static final)

    Java中的`final`关键字是一个非常重要的修饰符,用于在编程中实现不同的限制和特性。它可以在类、方法和变量上使用,确保代码的特定部分保持不可更改或不可重定义。 一、final修饰类 当`final`关键字用于类时,它...

    final关键字的使用

    ### Final关键字详解 #### 一、Final的基本概念...通过上述讨论,我们可以看出`final`关键字在Java编程中的重要作用及其与其他关键字之间的区别。正确理解并使用`final`可以帮助开发者编写更加健壮和易于维护的代码。

    深入浅析Java中的final关键字

    Java中的`final`关键字是一个非常重要的概念,它用于声明不可变的类、方法或变量,以确保代码的稳定性和安全性。下面将详细讲解`final`关键字的用途和使用细节。 一、`final`关键字的基本用法 1. 修饰类 当一个类...

    Java中final的用法.doc

    总结来说,`final`关键字在Java中扮演了多种角色,包括创建不可变变量、常量、对象和数组,确保方法和类的不可覆盖性,以及在多线程环境中的安全性。正确使用`final`能够提高代码的清晰度、稳定性和性能。

    java final变量详解

    final 变量的变与不变是一个重要的问题。有人说 final 变量在赋值后就不可变,但这个不变到底指的是什么呢?这个不变指的是引用,是地址,而所引用的对象的内容仍然是可变的。就是说,这个 final 变量的引用是不能...

Global site tag (gtag.js) - Google Analytics