9,i=i+1和i+=1完全等价吗?
可能有很多程序员认为i+=1只是i=i+1
的简写方式,其实不然,它们一个使用简单赋值运算,一个使用复合赋值运算,而简单赋值运算和复合赋值运算的最大差别就在于:复合赋值运算符会自动地将运算
结果转型为其左操作数的类型。看看以下的两种写法,你就知道它们的差别在哪儿了:
(1) byte i=5;
i+=1;
(2) byte i=5;
i=i+1;
第一种写法编译没问题,而第二种写法却编译通不过。原因就在于,当使用复合赋值运算符进行操作时,即使右边算出的结果是int类型,系统也会将其值转化为
左边的byte类型,而使用简单赋值运算时没有这样的优待,系统会认为将i+1的值赋给i是将int类型赋给byte,所以要求强制转换。理解了这一点
后,我们再来看一个例子:
byte b=120;
b+=20;
System.out.println("b="+b);
说到这里你应该明白了,上例中输出b的值不是140,而是-116。因为120+20的值已经超出了一个byte表示的范围,而当我们使用复合赋值运算时
系统会自动作类型的转化,将140强转成byte,所以得到是-116。由此可见,在使用复合赋值运算符时还得小心,因为这种类型转换是在不知不觉中进行
的,所以得到的结果就有可能和你的预想不一样。
1,位移运算越界怎么处理
考察下面的代码输出结果是多少?
int a=5;
System.out.println(a<<33);
按
照常理推测,把a左移33位应该将a的所有有效位都移出去了,那剩下的都是零啊,所以输出结果应该是0才对啊,可是执行后发现输出结果是10,为什么呢?
因为Java语言对位移运算作了优化处理,Java语言对a<<b转化为a<<(b%32)来处理,所以当要移位的位数b超过
32时,实际上移位的位数是b%32的值,那么上面的代码中a<<33相当于a<<1,所以输出结果是10。
分享到:
相关推荐
Java开发中,有很多琐碎的细节容易被我们忽视,本书算是对《Java Pazzlers》(Java解惑)的提炼
java中命名细节
值得细看的一些java知识点,个人测试之后的结果,拿出来分享一下。
一个桌面程序,通过游戏闯关的方式来了解一些java的语言细节 一个桌面程序,通过游戏闯关的方式来了解一些java的语言细节 一个桌面程序,通过游戏闯关的方式来了解一些java的语言细节 一个桌面程序,通过游戏闯关的...
对于学JAVA的新手很有参考价值,描述了JAVA中的一些常见的问题
Java 一些值得注意的细节,有时一些常见不常见的让人头疼的问题。
本资源内的问题有很多涉及java语言本质或JVM问题,很不错,本来准备收藏java语言常见255问题的但是没找到电子版,该资源该是某人(不是我)手打自java语言常见255问题,不过不全(估计是工程量太大),而且有些问题...
Java基础,你想不到的知识,JVM等,java基础 java细节
java人事面试细节.docjava人事面试细节.docjava人事面试细节.docjava人事面试细节.docjava人事面试细节.doc
这是java连接数据库连接不上的一些细节的问题的解决方式,希望对你们有所帮助。
Java性能优化的45个细节
该资源详细的描述了再java语言工作中要注意的几百个细节问题,包含文件系统,GUI,线程序列化、网络编程、数据库等等问题
java 实验指导 细节 生动JAVA 测试装机
java基础很不错学校资料,有需要的看看吧!
开发中我们经常忽略了一些影响性能的细节,这里特总结出来供大家参考。
每天在写Java程序, 其实里面有一些细节大家可能没怎么注意, 这不, 有人总结了一个我们编程中常见的问题. 虽然一般没有什么大问题, 但是最好别这样做.
Java性能优化的45个细节 1.尽量在合适的场合使用单例 2.尽量避免随意使用静态变量 ...
可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼被喂饱...
java开发规范,参考了阿里云的规范,开发规范从细节做起!
java简历编写细节.docxjava简历编写细节.docxjava简历编写细节.docxjava简历编写细节.docxjava简历编写细节.docx