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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王亚东 中级黑马   /  2013-3-7 18:42  /  1310 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王亚东 于 2013-3-8 13:20 编辑
  1. class Demo02
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.             int i=5;               
  6.             //i=i+5.0;// 这句话相当于 i = (double)i+5.0; 5.0是double类型,i是int类型,他们运算时,int会转为double
  7.             i+=5.0;//这里相当于:i = i+(int)5.0; +=是赋值运算符,就是把double强制转为int赋给i
  8.             System.out.println(i);
  9.     }
  10. }
复制代码
上面是我回答别人的问题的代码,但是后来看到有人对第二句的解释我的理解不一样,说是:
i+=5.0 相当于 i=(int)(i+5.0),虽然感觉二者没什么区别,但还是觉得第一种解释更准确点,大家觉得对吗?

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

4 个回复

倒序浏览
感觉
i = i+(int)5.0比i=(int)(i+5.0)高效一点,
i = i+(int)5.0,只转型了一次,5.0从double转成int;
i=(int)(i+5.0),转型了两次,i+5.0转成double,再强转成int

评分

参与人数 1黑马币 +9 收起 理由
王亚东 + 9 对头,多谢。

查看全部评分

回复 使用道具 举报
楼上回答的很好,我只想说要把//i=i+5.0;改成 i=(int)(i+5.0);要不编译通不过
class Demo02
{
    public static void main(String[] args)
    {
            int i=5;               
           //i=i+5.0;// 这句话相当于 i = (double)i+5.0; 5.0是double类型,i是int类型,他们运算时,int会转为double
            i+=5.0;//这里相当于:i = i+(int)5.0; +=是赋值运算符,就是把double强制转为int赋给i
            System.out.println(i);
    }
}

回复 使用道具 举报
张卫刚 发表于 2013-3-7 19:14
楼上回答的很好,我只想说要把//i=i+5.0;改成 i=(int)(i+5.0);要不编译通不过
class Demo02
{

i+=5.0;//这里相当于:i = i+(int)5.0; +=是赋值运算符,就是把double强制转为int赋给i


我原本以为:
i +=5.0;//先把 i 转换成double类型,与5.0做运算后的结果为double型,再自动强制转换成 int 类型.原来+=不遵循由小向大转换的规律,而是强制转换成定义的类型。
还好过来逛了逛论坛。
多谢

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
你执行  i=i+5.0;会发生错误吧    i会自动升为double类型 和 5.0完成运算后  可不会自动转成int   需要强制转换   i=(int)(i+5.0);   但你要是执行 i = i+(int)5.0;效率更好

i+=5.0;  这里+=是一次运算符  先提升i到double  再和5.0相加   再转成int  再赋值给 i  都算成是一步运算  程序自动强转  是OK的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马