黑马程序员技术交流社区
标题:
+=进阶问题
[打印本页]
作者:
王亚东
时间:
2013-3-7 18:42
标题:
+=进阶问题
本帖最后由 王亚东 于 2013-3-8 13:20 编辑
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);
}
}
复制代码
上面是我回答别人的问题的代码,但是后来看到有人对第二句的解释我的理解不一样,说是:
i+=5.0 相当于 i=(int)(i+5.0),虽然感觉二者没什么区别,但还是觉得第一种解释更准确点,大家觉得对吗?
作者:
黄基焜
时间:
2013-3-7 19:01
感觉
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
作者:
张卫刚
时间:
2013-3-7 19:14
楼上回答的很好,我只想说要把//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-8 00:36
张卫刚 发表于 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 类型.原来+=不遵循由小向大转换的规律,而是强制转换成定义的类型。
还好过来逛了逛论坛。
多谢
作者:
amen0205
时间:
2013-3-8 02:13
你执行 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的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2