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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© uu993 中级黑马   /  2014-6-10 19:05  /  1627 人查看  /  11 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

当利用final修饰一个属性(变量)的时候,此时的属性成为常量。  

举例:
Final int AGE=10;  
常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。

不知道这句话是什么意思,既然final定义了AGE为常量,AGE=10就应该不会再变化,
但是为什么说地址中保存的值会变化。
到底final定义了常量之后值还会不会变化呀?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

11 个回复

正序浏览
final修饰的基本类型变量值不可变,,修饰的引用类型的值也就是地址,不可变,可变的是地址指向的内容是可变的。
回复 使用道具 举报
基本数据类型的被final后值无法改变,否则编译报错,引用数据类型被final指向的地址无法改变
回复 使用道具 举报
uu993 发表于 2014-6-10 19:39
嗯,明白了,修饰引用数据类型表示该应用不能再指向其他对象,但是可以修改对象的内容。不过貌似private ...

给我点个支持呗
回复 使用道具 举报 1 0
uu993 中级黑马 2014-6-10 19:39:33
9#
axuan 发表于 2014-6-10 19:32
好,代码说明
package test;

嗯,明白了,修饰引用数据类型表示该应用不能再指向其他对象,但是可以修改对象的内容。不过貌似private和static都是系统默认添加final修饰符的~
回复 使用道具 举报
附加图片
package test;


class Student
{
        private String name;

        public String getName()
        {
                return name;
        }

        public void setName(String name)
        {
                this.name = name;
        }
       
}
public class test1
{
        private final static Student s=new Student();;
    public static void main(String[] args)
        {
                s.setName("张三");
                System.out.println(s.getName());//张三
                s.setName("李四");
                System.out.println(s.getName());
        }
}

捕获.JPG (177.77 KB, 下载次数: 14)

捕获.JPG

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
uu993 发表于 2014-6-10 19:20
能给写段小代码,指点一下吗?

好,代码说明
package test;


class Student
{
        private String name;

        public String getName()
        {
                return name;
        }

        public void setName(String name)
        {
                this.name = name;
        }
       
}
public class test1
{
        private final static Student s=new Student();;
    public static void main(String[] args)
        {
                s.setName("张三");
                System.out.println(s.getName());//张三
                s.setName("李四");
                System.out.println(s.getName());
        }
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 0
不去会死 发表于 2014-6-10 19:22
public class JavaTest {
public static void main(String[] args){
        for(int i = 0; i < 3; i++){

明白了好像~
回复 使用道具 举报
public class JavaTest {
public static void main(String[] args){
        for(int i = 0; i < 3; i++){
        final int t = i;//final变量被多次赋值
        System.out.print(t+" ");//输出结果:0 1 2 3
        }
}
这个应该能够说明一些问题
回复 使用道具 举报 1 0
axuan 发表于 2014-6-10 19:19
final修饰基本数据类型表示该属性不能被改写,修饰引用数据类型表示该应用不能再指向其他对象,但对象的内 ...

能给写段小代码,指点一下吗?
回复 使用道具 举报
final修饰基本数据类型表示该属性不能被改写,修饰引用数据类型表示该应用不能再指向其他对象,但对象的内容可以发生变化。对象是引用!
回复 使用道具 举报
就是说可以在此给AGE复另一个值吧原来的值覆盖掉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马