short x=97;short y=2;x=x+y; 怎么就错了呢?

时间:2021-11-25 01:16:38
正在看书本,碰到一些小问题,但是让人迷糊。

short x=97;
short y=2;
x=x+y;   这行为什么就错误呢?说是等号右边的数值为int型,而等号左边是short型,从而引起错误。

但是 x和y 都是short类型的,x+y怎么就变成int类型的了呢?

11 个解决方案

#1


JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.

#2


short 在参与计算时首先会转化成int类型,看来的强制转换了。

#3


引用 1 楼 gentleboy2009 的回复:
JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.


+1

#4


byte,short,char在程序执行的时候 自动先转换成int类型,
当要将x+y赋值给short类型的x时,要加上强制转换如  x=(short)(x+y)

#5


short byte char 在执行的时候 会自动转换成整形也就是int类型 所以这样错误   可以改成x=(short)(x+y)这样就对了  还有如果x+=1就是正确的

public class Test6 {

/**
 * @param args
 */
public static void main(String[] args) {
short a = 8;
a = a+8;  //错误 也改改成a = (short)a+8;
a+=8;   //正确

}

}

#6


二次操作时候会转换类型

#7


该回复于2011-04-20 09:31:38被版主删除

#8


引用 1 楼 gentleboy2009 的回复:
JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.


+1

#9


+1
引用 1 楼 gentleboy2009 的回复:
JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.

#10


byte short char会自动提升到int~所以右边运算式的结果实质上是int型,而左边是short类型大小不匹配必然会报错。只需要写成x=(short)(x+y) 或者 x += y即可。(一般推荐使用后者,第一这种方法效率更高,第二无需手动强制转换)。望采纳~

#11


引用 1 楼 gentleboy2009 的回复:
JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.
+1

#1


JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.

#2


short 在参与计算时首先会转化成int类型,看来的强制转换了。

#3


引用 1 楼 gentleboy2009 的回复:
JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.


+1

#4


byte,short,char在程序执行的时候 自动先转换成int类型,
当要将x+y赋值给short类型的x时,要加上强制转换如  x=(short)(x+y)

#5


short byte char 在执行的时候 会自动转换成整形也就是int类型 所以这样错误   可以改成x=(short)(x+y)这样就对了  还有如果x+=1就是正确的

public class Test6 {

/**
 * @param args
 */
public static void main(String[] args) {
short a = 8;
a = a+8;  //错误 也改改成a = (short)a+8;
a+=8;   //正确

}

}

#6


二次操作时候会转换类型

#7


该回复于2011-04-20 09:31:38被版主删除

#8


引用 1 楼 gentleboy2009 的回复:
JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.


+1

#9


+1
引用 1 楼 gentleboy2009 的回复:
JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.

#10


byte short char会自动提升到int~所以右边运算式的结果实质上是int型,而左边是short类型大小不匹配必然会报错。只需要写成x=(short)(x+y) 或者 x += y即可。(一般推荐使用后者,第一这种方法效率更高,第二无需手动强制转换)。望采纳~

#11


引用 1 楼 gentleboy2009 的回复:
JAVA中使用两个数值进行二元操作时,比如:x+y
先要将两个操作数转换为同一种类型,然后再进行计算
* 如果其中有一个为double类型,另一个转为double.
* 否则,如果其中一个为float,另一个转为float.
* 否则,如果其中一个为long,另一个转为long.
* 否则,两个操作数都转为int.
+1