初学JAVA一些类型运算以及类型转换细节
2017-03-12 17:01
246 查看
在java中,如下编写
byte b = 4;
b = 3 + 7;
编译能通过,但如果像下面这样编写,则编译无法通过,关键在于最后一句b=b1+b2上
byte b = 3;
byte b1 = 2;
byte b2 = 9;
b = b1 + b2;
原因:
首先,定义byte b = 4;为什么能通过,是因为java中默认整型都为int类型,所以java默认 4 为int 型,本来按类型是不能将4赋值给变量b的,但是编译器检查4这个数值不超过byte的取值范围(-128~127),所以编译器自动强制类型转换将int型转化成byte型,将4赋给了b。
而在下面一个例子中,由于b1与b2都为变量,编译时无法确定值,编译器无法确定b1 + b2的值是否会超过byte的取值范围,所以编译的时候报错:损失精度!
而:
int x = 4;
int x1 = 3;
int x2 = 98;
x = x1 + x2;
编译时却可以通过,是因为运算结果一定为整数,java默认为整数是int所以可以编译通过(好吧,这里我也不太懂,望大神解答)
7ebc
byte b = 4;
b = 3 + 7;
编译能通过,但如果像下面这样编写,则编译无法通过,关键在于最后一句b=b1+b2上
byte b = 3;
byte b1 = 2;
byte b2 = 9;
b = b1 + b2;
原因:
首先,定义byte b = 4;为什么能通过,是因为java中默认整型都为int类型,所以java默认 4 为int 型,本来按类型是不能将4赋值给变量b的,但是编译器检查4这个数值不超过byte的取值范围(-128~127),所以编译器自动强制类型转换将int型转化成byte型,将4赋给了b。
而在下面一个例子中,由于b1与b2都为变量,编译时无法确定值,编译器无法确定b1 + b2的值是否会超过byte的取值范围,所以编译的时候报错:损失精度!
而:
int x = 4;
int x1 = 3;
int x2 = 98;
x = x1 + x2;
编译时却可以通过,是因为运算结果一定为整数,java默认为整数是int所以可以编译通过(好吧,这里我也不太懂,望大神解答)
7ebc
相关文章推荐
- (5)java语言基础(注释,关键字,标识符,常变量,类型转换,转义字符、位运算和一些注意的运算)
- 对java基础数据类型在运算过程中的自动转换的一些分析
- 类型转换问题(java会把byte,short和char的运算操作转换为int类型即低精度自动向高精度转换)
- [置顶] Java的一些类型转换
- java笔记之封装、继承、重写、多态以及类型转换
- java中基本数据类型的包装类以及基本数据类型之间的转换
- Java中的移位操作以及基本数据类型转换成字节数组【收集】
- Java基础小知识——基本数据类型和字符串以及字节数组的转换
- java笔记之封装、继承、重写、多态以及类型转换
- java 类型转换的一些例子.
- Java语言基础(类型运算细节)
- 初学Java,判断类型是否可强制转换(十二)
- Java的类型以及在高精度数字运算过程中保持精度
- java笔记之封装、继承、重写、多态以及类型转换
- Java的类型以及在高精度数字运算过程中保持精度
- java一些数据类型转换
- java中八种基本数据类型以及它们的封装类,String类型的一些理解
- 初学Java,判断类型是否可强制转换(十二)
- 类型转换运算-java
- Java中基本数据类型的转换、原码和补码的表示及运算