24小时热门版块排行榜    

查看: 1673  |  回复: 8

studyhae

木虫 (正式写手)

[交流] 【求助】final 属性 已有7人参与

定义类:
class aClass{
     public final double x;
     public final double y;

    public double getXY(){
       return x*y;
   }
}

由于属性x,y为final,必须在new类的时候初始化x,y。我的问题是,java编译器在优化的过程中,会将x*y先计算出来吗?就是说getXY()方法,是不是直接返回一个值,而没有进行乘法计算?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

王建发

铜虫 (小有名气)

调试一下不就知道了吗
我发贴,我成长
2楼2010-11-18 22:54:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

王建发

铜虫 (小有名气)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+2):鼓励应助 2010-11-19 20:44:13
public class Aclass{
{
  x=10;
  y=10;
}
public final double x;
public final double y;
public double getXY(){
  return x*y;
}
}
可以这样初始化在new的时候就执行了
我发贴,我成长
3楼2010-11-18 23:03:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

linyujack

铜虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1):谢谢参与应助! 2010-12-14 09:54:26
应该不会在new的时候直接计算出来的,除非Java编译器的优化规则中,规定了这种情况,碰到final变量的情况,可以直接把getxy()的return替换为数值,但这种规则要实现起来似乎非常的麻烦。
卓越不仅仅是单一的举动,而是一种习惯。
4楼2010-12-13 23:26:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Thornfighter

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
微尘、梦想(金币+2): 谢谢回复…… 2011-04-06 15:18:21
class aClass{
     public final double x;
     public final double y;

    public double getXY(){
       return x*y;
   }
}

由于属性x,y为final,必须在new类的时候初始化x,y。我的问题是,java编译器在优化的过程中,会将x*y先计算出来吗?就是说getXY()方法,是不是直接返回一个值,而没有进行乘法计算?
一、类成员变量用final修饰需要在声明的时候就赋值,否则将不能通过编译直接报错。可以这样理解,因为在创建对象的时候,如果没有使用构造方法或静态初始化器为成员变量赋值,那么成员变量将被赋默认值(对int类型来说是0),而又由于有final修饰,所以一旦赋值后就不能修改,那这种成员变量将失去使用价值。
二、x*y不会先计算出来,这个你可以在getXY()方法中嵌入一个变量调试一下就知道了!
class aClass{
     public final double x=10;//使用final修饰成员变量的时候必须赋值
     public final double y=100;
     double test;

    public double getXY(){
        test=x*y;//嵌入test
        return x*y;
   }

    public double getTest() {
        return test;
    }
}

public class Test1 {
    public static void main(String[] args) {
        aClass a=new aClass();
        System.out.println("before getXY() run,test="+a.getTest());
        a.getXY();
        System.out.println("after getXY() run, test="+a.getTest());
    }
}
迷茫
5楼2011-04-05 18:18:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2): 谢谢参与应助! 2011-04-21 12:10:09
这个对于不同的编译器可能效果不同,但可以肯定的是一定会被优化掉
final表示最后一次赋值,在类型检查的时候x*y就会被代换成指定的值,然后再编译的时候发现常量相乘,肯定会被计算,楼上的解释不能说明问题:
text = 2*3与return 2*3明显就是text = 6与return 6
漩涡的中心有一块空地,空空的。
6楼2011-04-20 18:26:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kerenbing

铁虫 (初入文坛)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+1): 谢谢参与应助!欢迎常来程序语言版! 2011-12-08 14:05:20
我认为会先计算出x*y的值,因为final变量就相当于一个常量,在编译的时候就已经初始化了,x*y就可以看作是两个常量相乘。。。。。。。
7楼2011-12-06 08:47:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

空指针

铁虫 (初入文坛)

★
小木虫(金币+0.5):给个红包,谢谢回帖
个人愚见:final常理包括“编译时常量”和“运行时常理”,楼主这个应该属于运行时常量的,开始编译时应该不会直接计算的吧。如果在主函数里应该就能直接替代了。
8楼2012-02-15 14:31:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

niefang007

铁虫 (初入文坛)

★
小木虫: 金币+0.5, 给个红包,谢谢回帖
楼主只是new一下实例 没用实例去调用方法感觉应该不会计算,明天试试
9楼2014-02-25 21:46:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 studyhae 的主题更新
普通表情 龙 兔 虎 猫 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[公派出国] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 GxESXJmptOtQ 2026-09-25 4/200 2026-09-27 06:44 by XgCC8uTcwILl
[考博] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 GxESXJmptOtQ 2026-09-25 4/200 2026-09-27 06:42 by XgCC8uTcwILl
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 GxESXJmptOtQ 2026-09-25 4/200 2026-09-27 06:39 by XgCC8uTcwILl
[找工作] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 vQZoDrrm7mUF 2026-09-25 3/150 2026-09-27 06:08 by XgCC8uTcwILl
[公派出国] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 vQZoDrrm7mUF 2026-09-25 3/150 2026-09-27 06:05 by XgCC8uTcwILl
[硕博家园] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +4 vQZoDrrm7mUF 2026-09-25 4/200 2026-09-27 05:56 by XgCC8uTcwILl
[论文投稿] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +4 vQZoDrrm7mUF 2026-09-25 4/200 2026-09-27 05:56 by XgCC8uTcwILl
[考研] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 vQZoDrrm7mUF 2026-09-25 3/150 2026-09-27 05:56 by XgCC8uTcwILl
[找工作] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +5 vQZoDrrm7mUF 2026-09-25 5/250 2026-09-27 05:53 by XgCC8uTcwILl
[博后之家] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +4 vQZoDrrm7mUF 2026-09-25 4/200 2026-09-27 05:50 by XgCC8uTcwILl
[考研] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +3 vQZoDrrm7mUF 2026-09-25 5/250 2026-09-27 05:44 by XgCC8uTcwILl
[考博] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 vQZoDrrm7mUF 2026-09-25 3/150 2026-09-27 05:44 by XgCC8uTcwILl
[公派出国] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +4 vQZoDrrm7mUF 2026-09-25 4/200 2026-09-27 05:44 by XgCC8uTcwILl
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +3 vQZoDrrm7mUF 2026-09-25 6/300 2026-09-27 05:42 by XgCC8uTcwILl
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 PGTSwSC3F6nQ 2026-09-24 5/250 2026-09-25 11:19 by yhq9807
[公派出国] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +4 PGTSwSC3F6nQ 2026-09-24 7/350 2026-09-25 11:18 by yhq9807
[硕博家园] 上海工程技术大学 激光智能制造课题组 2027级博士研究生招生 +4 oxidpl 2026-09-20 6/300 2026-09-24 20:40 by oxidpl
[教师之家] 课题组招2027级博士 上海工程技术大学 激光智能制造方向 +4 oxidpl 2026-09-20 6/300 2026-09-24 20:37 by oxidpl
[基金申请] 师弟论文见刊大半年才想起来申请专利,还能抢救一下吗? +4 13108017953 2026-09-21 4/200 2026-09-24 10:06 by kudofaye
[有机交流] 有机合成以后会不会被AI改变?做科研的虫友怎么看 +5 zapen 2026-09-20 8/400 2026-09-23 17:21 by tianxiaoxian
信息提示
请填处理意见