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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 来男. 中级黑马   /  2014-5-2 21:25  /  1601 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 来男. 于 2014-5-3 10:19 编辑

final修饰变量时,引用变量不可变(1)但它所指向的对象内容可变(2)。(记得是这么个格式:
final Demo dm=new Demo("javaScript");
想问下(1)(2)是什么情况?

8 个回复

倒序浏览
=new Demo("javaScript")  是不能改变的
但是new Demo("javaScript") 所得的这个对象中的内容是可以改变的
也就是说dm永远代表这个对象,但是这个对象具体的内容是可以改变的

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
final特点:
1:这个关键字是一个修饰符,可以修饰类,方法,变量。
2:被final修饰的类是一个最终类,不可以被继承。
3:被final修饰的方法是一个最终方法,不可以被覆盖。
4:被final修饰的变量是一个常量,只能赋值一次。
回复 使用道具 举报
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 final Person p=new Person("lisi",22);
  6.                 p.name="zhangsan";  //指向的对象的值是可以变的
  7.                 p.age=223;                //指向的对象的值是可以变的
  8.                 //Person p1=new Person("wangwu",90);   final修饰的对象的指向不能变
  9.                 //p=p1;
  10.                 System.out.println(p.name+p.age);
  11.         }
  12. }
  13. class Person
  14. {
  15.         String name;
  16.         int age;
  17.         Person(String name,int age)
  18.         {
  19.                 this.name=name;
  20.                 this.age=age;
  21.         }
  22. }
复制代码

看上面的代码。
使用final修饰引用类型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的 。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
本帖最后由 hx小龙 于 2014-5-3 00:24 编辑

final的含义为最终,他可以修饰类和成员,包括成员变量和成员方法。
被final修饰的类不能被继承,但一般很少会用到。
如果楼楼问到了以上问题,猜测蓝主可能是有个概念比较模糊,就是引用变量是什么?
引用变量是引用类型的变量,包括类类型、数组和接口类型,实质就是一个指针常量,里边封装着对象的地址
所以他说
(1)被final修饰的引用变量,变量不可变是指代变量所指向的对象地址不可变,即不能把一个新的对象的引用变量赋值给此变量,也是板凳提到的
   
  1.        final Person p=new Person("lisi",22);
  2.        Person p1=new Person("wangwu",90);  
  3.        p=p1;
复制代码




不能将新生成的p1对象的值付给p,这个过程实际中在栈内存中交换的是堆内存中对象的地址


(2)他所指向的对象的内容可以改变,就是对内存中对象的成员变量。




最后有个注意的就是,被final关键字修饰的变量其值不可改变,但其初始化有两种方式,一种是在变量定义时初始化在定义处,即 final Person p=new Person("lisi",22); 此处假设是有Person(name,age)这个类,一个是在其构造函数中进行初始化。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
final可以修饰类,方法,和变量。
1,修饰类时:表示这个类不能被继承,只能创建该类的对象。
2,修饰方法时:表示这个方法不能被复写。
3,修饰变量时:表示这个变量的值是固定不变的。
  1. final Demo dm=new Demo("javaScript");
复制代码

dm就是指向对象的引用变量,引用变量是在栈中存储的,被final修饰表示此引用变量的所指向的地址是不可变的。但是所指向的对象内容是可变的。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
好吧,早有人回到了,我也学习一下
回复 使用道具 举报
三楼正解。
回复 使用道具 举报
final修饰引用变量的时候,引用变量指向不能改变,即引用变量的地址不能改变,但是引用变量的值可以改变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马