后面两个在运算前就把a转换为int了。
解决方案 »
- 为何在login.jsp表单处理switch.jsp中执行JSP:forward page="A.jsp"后,IE地址栏中为.../switch.jsp,不是.../A.jsp?
- 在深圳2k搞j2ee,是不是低了点?(刚毕业-应届生)
- 马上考试了,谁知道哪儿有大量java选择题?
- java服务器和C语言客户端的问题
- 类继承问题。。。。
- **********如何用程序打开一个excel再关闭它?*****
- 如何使用南极星?
- 求助:只能给这么多分了,若真能帮忙的话我另加
- 兄弟们,我已经有一个月没干活了,闲的发慌啊!
- 新手疑问!!在List集合中加入对象,使用比较器将对象内容进行排序。怎么实现不了比较器呢!
- 我想学JAVA,可是不知道用什么工具,用什么教材可以上手最快,请指教:)
- 谁知道如何下载到这个开发工具?
难道byte的数 +, -, *, /一个数就转成int,
byte的数 +=, -=, *=, /=,++,--,....就不转换int 了?
byte b2=++b1;
System.out.println("`````````````"+b2);//可运行,结果到为-128???如果 byte b2=b1+1;就报这个错了:
found : int
required: byte
byte b2=b1+1;
^
byte b2=++b1;
System.out.println("`````````````"+b2);//可运行,结果到为-128???
那这个结果应该越byte的界了,为什么结果变为负的了?
这不就与 roger2008(痴人说梦) 说的矛盾了吗?
大家看看这样认为对不对(我是看java2 编程指南):
1.byte/short在运算时会进行32位运算即int型,所以a++是对的
2.a = a + 1;时右边的a是int型的(转换), 但等号左边的仍是byte型, 所以出错;
3.由于+=运算符, 在其两边数据类型不同时, 会有自动的转型的过程(byte->short->int->long....), 所以a += 1语法没错(这和a = a + 1不同, 这里只是对a的值转型, 并没有对a转型.),现在又有一个疑问:a += 1;后a是什么类型的呢?
byte b1=127;
byte b2=++b1;
System.out.println("`````````````"+b2);//可运行,结果到为-128???
那这个结果应该越byte的界了,为什么结果变为负的了?---------
结果变为负的没错啊, 你用二进制算算, 就是这个结果.
int v1 = 9999999999;//10个9
无法通过编译,原因很简单,内存越界.int v1 = 999999999;//9个9
int v2 = 9; int v3 = v1*v2;
可以通过编译,也可以运行,但是结果是错的.也可以理解,现在单个的变量是不会越界了,可是结果越界了,但程序不报错,只是做了个truncate的动作.现在可以理解byte了
byte v = 127; 执行 v++ 或 v += 1后,程序不会报越界错误,只是做了个truncate,返回-128(可以用二进制换算一下),v依然是byte(否则应该返回128)依然有个令人困惑不解的地方,在做++的时候,JVM是先把v变成int,再转化成byte,还是直接用byte做呢?如果做了转换,++和v=v+1性能上就没有任何区别了,体现不出++的效率,因此,感觉上是不应该做转换的.
我认为那从这个结果
byte ba=-128;
ba-=-256;//从表面看-256和ba都超出了byte的范围
System.out.println("`````````````"+ba);//值为-128
byte bb1=ba;//证明ba还是byte型
可看出+=, -=, *=, /=,++,-- 等操作时,最终ba还是byte型,只是过程中忽略了int型,按byte范围处理!
(通过实践看出的,不知这种理解对不对)