java解惑之x += i;和x = x + i;
来源:互联网 发布:java语言从入门到放弃 编辑:程序博客网 时间:2024/05/01 23:18
复合赋值操作符包括 +=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=和|=,Java 语言规范中讲到,复合赋值 E1 op= E2 等价于简单赋值E1 =(T)((E1)op(E2)),其中T 是E1 的类型,除非E1 只被计算一次。换句话说,复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量的类型。
总之,复合赋值操作符会悄悄地产生一个转型。如果计算结果的类型宽于变量的类型,那么所产生的转型就是一个危险的窄化转型。这样的转型可能会悄悄地丢弃掉精度或数量值。对语言设计者来说,也许让复合赋值操作符产生一个不可见的转型本身就是一个错误;对于在复合赋值中的变量类型比计算结果窄的情况,也许应该让其非法才对。
复合赋值操作符要求两个操作数都是原始类型的,例如int,或包装了的原始类型,例如Integer,但是有一个例外:如果在+=操作符左侧的操作数是String类型的,那么它允许右侧的操作数是任意类型,在这种情况下,该操作符执行的是字符串连接操作。简单赋值操作符(=)允许其左侧的是对象引用类型,这就显得要宽松许多了:你可以使用它们来表示任何你想要表示的内容,只要表达式的右侧与左侧的变量是赋值兼容的即可。
Object x = "Buy ";
String i = "Effective Java!";
简单赋值是合法的,因为 x + i 是String 类型的,而String 类型又是与Object赋值兼容的:
x = x + i;
复合赋值是非法的,因为左侧是一个Object 引用类型,而右侧是一个String类型:
x += i;
转载自:无码团队blog-wuma.koubei.com
- java解惑之x += i;和x = x + i;
- x += i与x=x+i
- x=x+i和x+=i的问题,恭候大牛莅临
- Python神坑之—— i += x 不等于 i = i + x举例
- [python学习笔记]'i += x'和'i = i + x'的区别
- def f(x,l=[]): for i in range(x): l.append(i*i) print l
- Succ(x),Pred(X),inc(x,i),dec(x,i)
- Java x=x+(x++)+(++x)分析
- Python中变量自增、i+=x与i=i+x、is与==
- 在XSL里执行类似for(i=0;i〈x;i++)的循环
- 在XSL里执行类似for(i=0;i〈x;i++)的循环
- java中的x=x++
- 老问题:关于X++和++X及其X=X++
- Java求多项式exp(x)=1+x+ 2!/ x2 + 3!/x3 +……+ i!/xi (|i!/xi|≤10^-10)
- nbut [1377] I Hate Math 输出f(x) = 2x^5 + 3x^4 + 4x^3 + 5x^2 - kx的最小解
- perl: /i, /s, /x, /m
- X I N的开始
- x=x|(x+1);和x=x&(x-1)?
- Oracle自治事务的介绍(Autonomous Transactions)PRAGMA AUTONOMOUS_TRANSACTION;
- Don't use extjs
- Rome使用简单说明二(部分关键源码分析)
- 如何创建和管理我的MSSQL数据库(Microsoft SQL 2000数据库)
- 对Rome之我见
- java解惑之x += i;和x = x + i;
- Intellij_IDEA-7.0.5信息安装说明
- 利用CreateProcess API函数来创建相应的进程
- DB2 SQLSTATE 类代码
- js实现轮转图片
- 将ext2 的feed改到java环境下运行
- usplash更换ubuntu启动画面
- How To: Set Up SSL on a Web Server
- 写出漂亮代码的七种方法