A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 商秀川 中级黑马   /  2012-8-23 22:42  /  1988 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
本帖最后由 杨鹏鹏 于 2012-8-23 23:08 编辑

当final修饰一个引用类型时。表示该引用类型不能指向其他对象了
回复 使用道具 举报
本帖最后由 唐杨 于 2012-8-23 23:15 编辑

使用final 关键字修饰一个变量时,是指引用不能变,
引用变量所指向的对象中的内容可以改变。
例如,对于如下语句:
final StringBuffer sb=new StringBuffer("Hello World");
执行这个语句将报告编译期错误:       sb=new StringBuffer("!!!!!!!");
但是,执行这个语句则可以通过编译:sb.append("!!!!!");

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. public class Test {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub

  7.                 final int x = 5;
  8.                 //x = 6;//编译不通过
  9.                 System.out.println(x);
  10.                
  11.                 final StringBuilder sb=new StringBuilder("Hello World");
  12.                 //sb = new StringBuilder("trtt");//编译不通过
  13.                 sb.append("1234");
  14.                 System.out.println(sb.toString());               
  15.         }
  16. }
复制代码
final修饰基本数据类型变量时,基本数据类型变量的值不能改变
final int x = 5;
x = 6;//编译不通过.不能改变x的值
final修饰引用变量时,引用所指向的对象不能改变,对象中的内容可以改变
final StringBuilder sb=new StringBuilder("Hello World");
sb = new StringBuilder("trtt");//编译不通过
sb.append("1234");//内容可以改变

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
分两种情况,一种是修饰基本数据类型,这时变量的值不可以变
另一种是修饰引用数据类型,这时引用的对象不能改变,也就指向的数据地址不能变,但数据值可以变。
回复 使用道具 举报
final 对于常量来说,意味着值不能改变,例如 final int i=20。这个i的值永远都是20。但是对于变量来说又不一样,只是标识这个引用不可被改变,例如 final File f=new File("D:\\Demo.txt");那么这个f一定是不能被改变的,如果f本身有方法修改其中的成员变量,例如是否可读,是允许修改的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马