byte类型的127+1 = 128吗

发布时间:2024-11-14 21:56

最新推荐文章于 2023-02-25 21:41:40 发布

米兰的小铁匠z 于 2020-04-09 11:08:59 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

请看一道面试题

public class Test2 { public void add(Byte b) { b = b++; } public void test() { Byte a = 127; Byte b = 127; add(++a); System.out.println("a = "+a); add(b); System.out.println("b = "+b); } public static void main(String[] args) { Test2 test2=new Test2(); test2.test(); } }

12345678910111213141516171819

运行结果为:
  a = -128
  b = 127
为何呢?
分析:
首先看b,Byte b = 127; add(b) ,Byte属于包装类的值传递,并不会引起真实值的改变,可以看Java的值传递机制

再看a的值变化,++a表示的是a的参数先加1了再参与传参。
但是即使函数内部a的值怎么变化,a再传参前就已经加1了。
但是a+1 = 128吗,其实不然!
原因如下:
byte 的取值 -128 ~ 127
当 127 + 1 其实就已经越界了。但是在内存中时怎么处理呢?

十进制二进制1270111 1111127+1-1281000 0000

因为在八位二进制的表示中:1000 0000的最高位符号位为1,是一个负数,故采用补码的形式,则对应的十进制就是-128。

如有出入恳请指教

网址:byte类型的127+1 = 128吗 https://www.yuejiaxmz.com/news/view/75873

相关内容

【Java】基础类型之float(八)
java中intx=1 y=2
生活阳台属于内阳台类型吗?
【美食制作】128道家常菜菜谱做菜超清视频教程
unsupported operand
《主板维修精华秘籍》扫描版[PDF]
人脑 vs 算法:社交技能的比较研究1.背景介绍 社交技能是人类在日常生活中进行交流、沟通、建立关系等方面的能力。随着人
阳台有哪些类型,你了解吗?
女性各类体型的优缺点 X型身材=完美
为什么Java中“1000==1000”为false,而”100==100“为true?

随便看看