已有259人关注
final声明疑惑?
发表在Java答疑区 2017-06-18
是否精华
版块置顶:


public class FinalDateTest {

final int VALUE_ONE = 6;// final 成员变量不可更改

final int BLANK_FINALVALUE;// 在声明final变量时没有赋值,称为空白final


public FinalDateTest() {

BLANK_FINALVALUE = 8;// 在构造方法中为空白final赋值

}


int doit(final int x) {// 设置final参数,不可以改变参数x的值

return x + 1;

}


int dosomething() {

final int i = 7;// 局部变量定义为final,不可改变i的值

return i;

}


public static void main(String[] args) {

FinalDateTest fd = new FinalDateTest();

System.out.println(fd.VALUE_ONE);

System.out.println(fd.BLANK_FINALVALUE);

System.out.println(fd.doit(2));

System.out.println(fd.dosomething());

}

}

疑问:

int doit(final int x) {// 设置final参数,不可以改变参数x的值

return x + 1;

语句中 参数x被final修饰,用 System.out.println(fd.doit(2));语句输出为:3 ,这里不是改变了x的值吗?

int doit( int x) {

return x + 1;

相比较,输出的结果都是3,这里的参数x 有什么差别?


2017-06-18 13:55:16编辑
分享到:
精彩评论 3
David
学分:914 LV7
TA的每日心情
最后的冲刺
2017-07-15 10:46:08
2017-06-19
沙发

请读者读者理解如下代码:

public class Test {

    final static int ONE = 1;

    public static void main (String[] args) {

        ONE = 2; // 报错,因为被final修饰的ONE不能被更改

        System.out.println(ONE + 1); // 控制台输出的结果为2

    }

}

chenbaojunjava
学分:58 LV3
2017-06-19
板凳

David 发表于2017-06-19 17:37

请读者读者理解如下代码:

public class Test {

    final static int ONE = 1;

    public static void main (String[] args) {

        ONE = 2; // 报错,因为被final修饰的ONE不能被更改

        System.out.println(ONE + 1); // 控制台输出的结果为2

    }

}

我的理解是ONE的值,始终没有被改变,也不能被改变,输出2其实是ONE+1的运算结果,ONE的值,至始至终都没有变,只是被调用,并参与了一次运算。这和问题中的

return x + 1   是一个道理,其实x的值没有变,这是参与了一次+1的运算。

谢谢老师!

David
学分:914 LV7
TA的每日心情
最后的冲刺
2017-07-15 10:46:08
2017-06-20
地板

读者的理解是正确的。

首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照