使用final关键字修饰一个变量,是引用不能变,还是引用对象的地址不能变?

转载 2015年11月17日 17:06:50

使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

例如,对于如下语句:
final StringBuffer a=new StringBuffer("immutable");
执行如下语句将报告编译期错误:
a=new StringBuffer("");
但是,执行如下语句则可以通过编译:
a.append("broken!");
有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:
publicvoidmethod(final StringBuffer param)
{
}
实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:
param.append("a");这是因为变量param的引用并没有变化,所以是不会出错的。

但是下面的就会出错了,因为int类型的数据是直接放在了栈内存当中的,它不需要想对象一样需要有一个引用,如果

修改了x就是修改了引用,所以如果修改了x那么就会出错。

 public int addOne(final int x) {
 return x++;
 }

又比如如下的例子:

publicclass Something{
public static void main(String[] args) {
Other o = newOther();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}

 

这个在编译的时候也是不会出错的,因为这个时候修改的不是对象的引用而是对象的属性,因为只有对象是final类型的,所以只要不去修改对象就不会出现错误的。

版权声明:本文为博主原创文章,未经博主允许不得转载

相关文章推荐

java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?   是引用对象的地址值不能变,引用变量所指向的对象的内容是可以改变。   final变量永远指向这个对象...

final修饰的变量是引用不能改变还是引用的对象不能改变

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。...

Java Final修饰符存储位置以及作用意义

前言: final大家在开发中都常见,会将修饰的变量固定不可重复赋值,但是被它所修饰属性变量或类存储在哪里呢?下面已问答形式,对final有一个全面的认识。 问题:final修饰的变量和...

面试题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

/* * 问题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 * 答: * 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以...

匿名内部类使用了一个在其外部定义的对象,为什么编译器会要求其参数引用是final呢

【摘】匿名内部类使用了一个在其外部定义的对象,为什么编译器会要求其参数引用是final呢 2010-05-19 20:33 是匿名内部类,不是普通的内部类。 原因如下: ...

黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)

------- android培训、java培训、期待与您交流! ---------- 一、面向对象(继承) 继承: 1.提高了代码的复用性。 2.让类与类之间产生了关系。有了这个关系,才有了多态...

final关键字修饰变量的几点思考

final关键字修饰变量时,既可以修饰成员变量。又可以修饰局部变量。 若修饰成员变量,必须对变量赋值一次,且只能赋值一次。准确来说应该是初始化一次,尽管在申明成员变量的过程中,系统会默认对变...

J2SE基础夯实系列之String字符串不可变的理解,不可变类,final关键字到底修饰了什么

String类型是不可变的。这句话说的简单,但是涉及到真正的理解的话,还需要好好思考:说穿了,就是说,一定要明白到底是引用不可变还是引用指向的对象不可变。            例如,当时去面试Or...

了解临时对象的来源 (深刻理解为什么不能返回一个临时变量的引用)

什么是临时对象?         C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象. 通常出现在以下两种情况: (1)为了使函数调用成功而进行隐式...

php面向对象类中的$this,static,final,const,self及双冒号 :: 这几个关键字使用方法。

php中this,self,parent三个关键字的作用 this,self,parent三个关键字之间的区别,从字面上比较好理解,分别是指这、自己、父亲。我们先建立几个概念,这三个关键字分别是用...
  • tham_
  • tham_
  • 2014年12月20日 12:23
  • 3529
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用final关键字修饰一个变量,是引用不能变,还是引用对象的地址不能变?
举报原因:
原因补充:

(最多只允许输入30个字)