24小时热门版块排行榜    

查看: 1390  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 268求调剂 +3 简单点0 2026-03-17 3/150 2026-03-17 23:15 by wangjihu
[考研] 328求调剂,英语六级551,有科研经历 +3 生物工程调剂 2026-03-16 8/400 2026-03-17 19:03 by Wangjingyue
[考研] 材料与化工专硕调剂 +5 heming3743 2026-03-16 5/250 2026-03-17 14:03 by 勇敢太监王公公
[考研] 302求调剂 +4 小贾同学123 2026-03-15 8/400 2026-03-17 10:33 by 小贾同学123
[考研] 267一志愿南京工业大学0817化工求调剂 +6 SUICHILD 2026-03-12 6/300 2026-03-17 09:24 by 雾散后相遇lc
[考研] 机械专硕325,寻找调剂院校 +3 y9999 2026-03-15 5/250 2026-03-16 19:58 by y9999
[考研] 化学调剂0703 +8 啊我我的 2026-03-11 8/400 2026-03-16 17:23 by 我的船我的海
[考研] 304求调剂 +4 ahbd 2026-03-14 4/200 2026-03-16 16:48 by 我的船我的海
[考研] 0703化学调剂 +6 妮妮ninicgb 2026-03-15 9/450 2026-03-16 16:40 by houyaoxu
[考研] 求老师收留调剂 +4 jiang姜66 2026-03-14 5/250 2026-03-15 20:11 by Winj1e
[考研] 材料工程327求调剂 +3 xiaohe12w 2026-03-11 3/150 2026-03-14 20:20 by ms629
[考研] 265求调剂 +4 威化饼07 2026-03-12 4/200 2026-03-14 17:23 by userper
[考研] 328求调剂 +3 5201314Lsy! 2026-03-13 6/300 2026-03-14 15:31 by hyswxzs
[基金申请] 有必要更换申报口吗 20+3 fannyamoy 2026-03-11 3/150 2026-03-14 00:52 by zhanghaozhu
[考研] 0703化学一志愿211 总分320求调剂 +5 玛卡巴卡啊哈 2026-03-11 5/250 2026-03-13 21:40 by JourneyLucky
[考研] (081700)化学工程与技术-298分求调剂 +12 11啦啦啦 2026-03-11 35/1750 2026-03-13 21:25 by JourneyLucky
[考研] 301求调剂 +6 Liyouyumairs 2026-03-11 6/300 2026-03-13 20:11 by JourneyLucky
[考研] 求b区学校调剂 +3 周56 2026-03-11 3/150 2026-03-13 16:20 by JourneyLucky
[考研] 310求调剂 +3 【上上签】 2026-03-11 3/150 2026-03-13 16:16 by JourneyLucky
[考研] 工科278分求调剂 +5 周慢热啊 2026-03-12 7/350 2026-03-13 15:49 by JourneyLucky
信息提示
请填处理意见