java, short s=100; 可以。但是 int i=100; short s=i;就不行为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java, short s=100; 可以。但是 int i=100; short s=i;就不行为啥?相关的知识,希望对你有一定的参考价值。

参考技术A int
i=100;
short
s=i,i是int类型的变量,而s是short类型的变量,这是两种不同的数据类型,所以不能直接将int类型的i赋值给short类型的s(当然还有其它几种情况是可以直接像你这样不需要强制转换的,直接赋值也是可以的)。
所以此时,你需要对i进行强制类型转换,改为:short
s=(short)i
参考技术B 类型的
强制转换问题:
向上转换(自动转换,隐式转换):
short
s=100;
int
i
=
s;
这个是没问题的
向下转换(需强制)
int
i=100;
short
s=(short)i;
-------------------------------------------------
自动类型转换
自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以
Java
语言在设计时,没有为该操作设计语法,而是由
JVM
自动完成。
转换规则:从存储范围小的类型到存储范围大的类型。
具体规则为:byte→short(char)→int→long→float→double
也就是说
byte
类型的变量可以自动转换为
short
类型,示例代码:
byte
b
=
10;
short
sh
=
b;这里在赋值时,JVM
首先将
b
的值转换为
short
类型,然后再赋值给
sh。
在类型转换时可以跳跃。示例代码:
byte
b1
=
100;
int
n
=
b1;
注意问题:在整数之间进行类型转换时,数值不发生改变,而将整数类型,特别是比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在数据精度的损失。
强制类型转换
强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。
转换规则:从存储范围大的类型到存储范围小的类型。
具体规则为:double→float→long→int→short(char)→byte
语法格式为:(转换到的类型)需要转换的值
示例代码:
double
d
=
3.10;
int
n
=
(int)d;
这里将
double
类型的变量
d
强制转换成
int
类型,然后赋值给变量
n。需要说明的是小数强制转换为整数,采用的是“去
1
法”,也就是无条件的舍弃小数点的所有数字,则以上转换出的结果是
3。整数强制转换为整数时取数字的低位,例如
int
类型的变量转换为
byte
类型时,则只去
int
类型的低
8
位(也就是最后一个字节)的值。
示例代码:
int
n
=
123;
byte
b
=
(byte)n;
int
m
=
1234;
byte
b1
=
(byte)m;

b
的值还是
123,而
b1
的值为-46。b1
的计算方法如下:m
的值转换为二进制是10011010010,取该数字低8位的值作为b1的值,则b1的二进制值是11010010,按照机器数的规定,最高位是符号位,1
代表负数,在计算机中负数存储的是补码,则该负数的原码是
10101110,该值就是十进制的-46。
注意问题:强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。

cast——java类型转换

    以下例说之:

byte b = 3; //??? 3是一个int常量,但是会自动判断3是不是在byte类型的范围内
b = b + 2; //Type mismatch: cannot convert from int to byte

   若非强制转换,则

b = (byte) (b + 2);

    在看下例:(s = s + 5;/ s += 5;之间的区别)

short s = 4;
s = s + 5; //编译失败,因为s会被提升为int类型,运算后的结果还是int类型,无法short类型
s += 5; //编译通过,因为+=运算符在给s赋值时,自动完成了强转操作

 

以上是关于java, short s=100; 可以。但是 int i=100; short s=i;就不行为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Java HashSet和数据类型Short,不兼容?

Java基础_赋值运算

java String类型 “你好” 转 short[]类型 麻烦快

JAVA学习笔记

如何对 BinaryWriter 使用 short[]?

java short 数组转换 byte