使用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类型的,所以只要不去修改对象就不会出现错误的。

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

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

使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? /* 答:  * 使用final关键字修饰一个引用变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的...
  • xielting
  • xielting
  • 2015年06月03日 21:46
  • 494

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

java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?   是引用对象的地址值不能变,引用变量所指向的对象的内容是可以改变。   final变量永远指向这个对象...
  • qq_35448976
  • qq_35448976
  • 2017年07月21日 08:08
  • 3503

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

/* * 问题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 * 答: * 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以...
  • u012110719
  • u012110719
  • 2015年06月02日 20:10
  • 7946

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

package com.zb.test; public class Testfinal { public static void main(String[] args) { final ...
  • shuiyuehaha
  • shuiyuehaha
  • 2013年07月18日 17:32
  • 665

java中的 final 关键字 修饰引用时的问题

final使得被修饰的变量”不变”,但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。 引用本身的不变: final StringBuffer ...
  • zgrgfr
  • zgrgfr
  • 2017年02月21日 11:21
  • 416

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

转:http://blog.csdn.net/u012110719/article/details/46334413 /*   * 问题:使用final关键字修饰一个变量时,是引用...
  • caixiajia
  • caixiajia
  • 2017年08月27日 17:56
  • 135

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

使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
  • s2940086379
  • s2940086379
  • 2015年05月21日 20:12
  • 471

final修饰的对象地址不可改变

我们都知道final修饰的对象地址值不能改变,如图 但是把一个用final修饰的对象作为参数传递的时候,地址值可以改变吗?会不会报错呢?如图 因为形参Other other是add...
  • hello_word2
  • hello_word2
  • 2018年01月05日 19:37
  • 37

java中final修饰方法传入参数的影响

最近在看spring 源码深度解析 看到了许多方法中的参数被final修饰符修饰 什么作用自己蒙了 难道在方法中不允许修改参数么 网上查了查 恍然大悟 final类型修饰的参数分为两种类型 基本类...
  • majun_guang
  • majun_guang
  • 2015年04月09日 18:32
  • 5650

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

使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。 例如,对于如下语句: final StringBuffer a=new StringBuffe...
  • u010239570
  • u010239570
  • 2015年11月17日 17:06
  • 454
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用final关键字修饰一个变量,是引用不能变,还是引用对象的地址不能变?
举报原因:
原因补充:

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