java 强制类型转化:

为什么对变量byte b;来说
b=(int)120;语句是正确的,而
b=b*3;是错误的???
为什么第一条语句不需要进行强制转化就能成功?【b=(byte)(int)120】
我不理解的地方在于为什么将120强制转换为int类型的时候赋值给b没有出错,但是将b*3复制给b的时候却会出错,而且出错的原因是因为“缺少一个转换(byte)”
ps:
还有一个疑问,当b的值为3的时候,b*3的值为9,没有超过byte类型的取值范围,但是编译器任然会报错,而必须进行类型转化(byte)(b*3),如果说是因为在赋值的过程中进行了隐含的类型转化,b*3经过运算变为了int类型的9的而必须进行强制类型转化的话,那么赋值语句是否等价为
b=(byte)(b*3); == b=(byte)((int)9);
如果是这样的话,那么为什么直接给b赋一个int类型的值编译器不会报错呢,比如下面语句 b=(int)5;
就可以正确编译。

byte b ;
b=120; //不会出错.是因为120java中默认是int型,也就是你在赋值的时候java中默认的转换成byte型了而byte型的存储范围是-128-127由int型120到byte型120并没超出byte的存储空间,所以不会报错,而如果你将其换成,128则会报"cannot convert from int to byte" 因为已经超出了存储范围了
b=(byte) 300; //解释同上
b = (byte)(b*3);//这个你除了要明白上面的问题你还要知道明白运算优先级,你原来的出错代码是b = b*3; 你在b*3的时候是运算出int型然后将360赋值给b,而此时你并没强转成byte型.所以会报错.你在强转的时候,(byte)b*3这样写实不行的.因为这涉及到优先级,你要知道这个运算时怎么执行的.先执行的(byte)b --->再执行的*3--->*3的运算结果是一个int型的所以依然要报"cannot convert from int to byte" 需要在运算完才能再强转..
话说的有点罗嗦..希望能给你带来帮助.
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-03
byte 也是数字类型 它的范围为-128到127 所以不用强转
b=(int)5; 没超出范围 就隐式转换了啊
而b=b*3;报错可能是因为编译器不知道 b*3的结果在不在byte的范围内吧
第2个回答  2011-01-31
java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的
byte b=(int)120 ,b存的值还是数字肯定成功,b=b*3;这是你类型转化错误
转化一下b=(byte)(b*3)。
第3个回答  2011-01-31
java中数据类型转换低级的向高级转换可以自动转换,因为不丢失数据!比如byte转换为int
但是高级向低级转换成高级的时候的时候可能会丢失数据,这个时候我们需要强制转换
第4个回答  2011-01-31
蓝天说的很清楚了,主要是类型的范围问题,byte范围为-128到127,b=(int)120 : b存的时候没有超出byte的范围,所以正确,但是后面那条语句b*3的时候已经为360超出byte的范围了,需要丢失数据,即把前面的数据砍掉,只保留7位,所以必须把b*3的值转化为byte型才能重新赋给b,即b=(byte)(b*3)。

java中强制类型转换的定义是什么呢?
Java中的强制类型转换指的是在将一个类型的数据转换为另一个类型时,需要明确指定转换规则的过程。这通常在进行函数调用时出现,尤其是当返回值类型与实际表达式的类型不同时。在示例代码中,我们有以下变量声明和赋值操作:int n; double d = 3.88;随后,执行了 n = d; 的赋值操作。这里涉及到的...

java中double型转化成int型
Java中double型转化成int型的答案是使用强制类型转换。在Java中,可以使用强制类型转换将double类型转换为int类型。由于int类型是一种整型,它会丢失小数部分,只保留整数部分的值。这种转换可能会导致数据丢失或改变,因此在进行转换时需要谨慎处理。以下是具体的转换方法:具体解释如下:1. 强制类型转换方法...

java中的强制类型转换
Java中的强制类型转换对于引用数据类型尤为重要。虽然子类可以自然地向上转型为父类,但父类转为子类却需借助强制转换。这是因为子类通常具有更多的属性和功能,强制转换旨在提升父类引用的能力。然而,这种转换并非总是成功,它依赖于对象的真实类型是否符合转换条件。举个例子,假设我们有两个类Father和Son...

java 中的类型转换
需要注意的是,Java并没有类似于C语言中的强制类型转换方法。在C语言中,可以通过强制类型转换将一个变量从一种类型转换为另一种类型。而在Java中,这种直接的强制类型转换并不支持。Java的设计哲学是“尽可能多的延迟类型转换”,以提高程序的健壮性和可读性。在类实例转换中,如果要将一个类实例转换...

Java强制数据类型转换
1.容量小的向容量大的转换,可以自动转换,比如可以直接将一个int类型赋值给double:double d = 34;2.容量大的向容量小的转换,必须强制类型转换,就是你上面的那种形式,比如:double c = 5\/9.0 *(f - 32);int nowC = (int)c;3.整数类型常量默认为int类型,比如17 4.浮点类型常量默认为...

Java中的强制类型转换是如何转换的?
java中数据类型的强制转换是通过强制转换语句完成的,强制转换语句的格式为“目标数据类型 变量 = (目标数据类型) 数据;”。下面给出例子:1、定义两个字节数据类型a、b、c,分别赋予1和2和a+b的值,进行加法运算的式子a+b=3,得出的结果“3”将会被编译环境判定为整形数据,把这个整形数据赋值...

Java中怎么将Long类型转换成Integer或int
在Java编程中,将Long类型的数值转换为Integer或int类型是常见的需求。要实现这个转换,可以通过强制类型转换来完成。以下是具体步骤:首先,定义一个long类型的变量并赋值,例如:long i = 10;接着,声明一个int类型的变量,用于存储转换后的值:int j;关键步骤在于使用强制转换操作,通过在等号两边添加...

【技术分享】java中long类型转换为int类型
以下是几种转换方法,仅供参考:一、强制类型转换[java]:long ll = 300000; int ii = (int)ll;二、调用intValue()方法[java]:long ll = 300000; int ii= new Long(ll).intValue();三、先把long转换成字符串String,然后在转行成Integer[java]:long ll = 300000; int ii = Integer....

java中的强制类型转换
用(String)做强制类型转换和用String.valueOf()区别在于:String 就是直接强制转化成String型的字符串,且有优先级限制,像int i=123;不能String s=(String)i。而String.valueOf()里面的参数转换可以是double、long、char[] 、long等等,没限制,所以String s=String.valueOf(i)。toString()方法返回...

【Java基础知识 7】toString()、String.valueOf、(String)强转_百度...
首先,对于基本类型,它们没有toString()方法,因此无法直接调用。推荐使用的是使用(String)进行强制类型转换,但这种方法需要谨慎使用,尤其是当对转换结果进行非空判断时,应该使用instanceof关键字确保转换的合法性,以避免出现ClassCastException异常。尽管编译器不会在转换时提示错误,但在运行时可能会遇到...

相似回答
大家正在搜