本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
![]() 8分33秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 步骤 1 : 转换规则 步骤 2 : 低精度向高精度转换 步骤 3 : 高精度向低精度转换 步骤 4 : 练习-类型转换 步骤 5 : 答案-类型转换
转换规则如图所示
精度高的数据类型就像容量大的杯子,可以放更大的数据 精度低的数据类型就像容量小的杯子,只能放更小的数据 小杯子往大杯子里倒东西,大杯子怎么都放得下 大杯子往小杯子里倒东西,有的时候放的下,有的时候就会有溢出 需要注意的一点是 虽然short和char都是16位的,长度是一样的 但是彼此之间,依然需要进行强制转换 public class HelloWorld {
public static void main(String[] args) {
char c = 'A';
short s = 80;
//虽然short和char都是16位的,长度是一样的
//但是彼此之间,依然需要进行强制转换
c = (char) s;
//直接进行转换,会出现编译错误
s = c;
}
}
public class HelloWorld { public static void main(String[] args) { char c = 'A'; short s = 80; //虽然short和char都是16位的,长度是一样的 //但是彼此之间,依然需要进行强制转换 c = (char) s; //直接进行转换,会出现编译错误 s = c; } } long l = 50; int i = 50; l 是long类型的,其类型长度是64位 i 是int类型的,其类型长度是32位 所以l的精度,比i的精度要高 l = i; 把i的值赋给l, 首先l和i彼此的类型是不一样的,那么能否转换就取决于彼此的精度 这个例子,是低精度向高精度转换 是可以正常转换的 换句话说,int比较小,要放进比较大的long,随便怎么样,都放的进去 public class HelloWorld {
public static void main(String[] args) {
long l = 50;
int i = 50;
//int比较小,要放进比较大的long,随便怎么样,都放的进去
l = i;
}
}
public class HelloWorld { public static void main(String[] args) { long l = 50; int i = 50; //int比较小,要放进比较大的long,随便怎么样,都放的进去 l = i; } } byte b = 5; int i1 = 10; int i2 = 300; b = i1; b=i2; b的类型是byte,其长度是8,最大只能放127 i1 的类型是int, 其长度是32,最大,反正就是很大了,超过127 所以, 把int类型的数据转成为byte类型的数据,是有风险的 有的时候是可以转换的,比如 b = i1 (i1=10); 有的时候不可以转换 比如 b= i2 (i2=300) 因为放不下了 编译器就会提示错误 这个时候就只能采用强制转换,强制转换的意思就是,转是可以转的,但是不对转换之后的值负责。 风险自担,后果自负 public class HelloWorld {
public static void main(String[] args) {
byte b = 5;
int i1 = 10;
int i2 = 300;
b = (byte) i1;
//因为i1的值是在byte范围之内,所以即便进行强制转换
//最后得到的值,也是10
System.out.println(b);
//因为i2的值是在byte范围之外,所以就会按照byte的长度进行截取
//i2的值是300,其对应的二进制数是 100101100
//按照byte的长度8位进行截取后,其值为 00101100 即44
b =(byte) i2;
System.out.println(b);
//查看一个整数对应的二进制的方法:
System.out.println(Integer.toBinaryString(i2));
}
}
short a = 1;
short b = 2; 那么 a+b 是什么类型?
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
![]() 1分14秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 public class HelloWorld {
public void method1(final int j) {
short a = 1;
short b = 2;
short c = (short) (a+b);
}
}
public class HelloWorld { public void method1(final int j) { short a = 1; short b = 2; short c = (short) (a+b); } }
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
![]()
问答区域
2020-12-03
1或2 不属于short类型吗?
4 个答案
地上的男神 跳转到问题位置 答案时间:2021-01-24 这不是可以存吗,不过要强制转换,byte是八位,short是16位,强制转换过后不会对结果产生能够影响的
short y=1; short z=2; byte L=(byte)(y+z); System.out.println(L); DQ970913 跳转到问题位置 答案时间:2021-01-18 int
黑黑是仙女 跳转到问题位置 答案时间:2021-01-13 short存的是 16bit,在做+运算的时候会自动变量提升。相当于1+2这个结果是一个32bit,你把32bit放short就会放不下,需要强制类型转换。
如果你用a+=b; +=属于赋值运算。自动提升计算后又进行了自动转换 所以就能存放在short里 。字节码文件帮我们做了转换的步骤(short) (a+b)
Tarro 跳转到问题位置 答案时间:2020-12-06 因为java在基本类型进行算术运算的时候,会发生小字节类型向大字节类型转换的现象。自动向上转型是按照
char->int -> long -> float -> double的顺序。比如byte+byte=int,short+short=int,由于int是2的32次方,对于一般算术运算基本够用,所以int+int=int,如果以后计算精度要求过高,以后版本的Java还可以向上转型。
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2020-10-14
类型转换
3 个答案
Shuker 跳转到问题位置 答案时间:2020-12-19 答案
gymtar528 跳转到问题位置 答案时间:2020-10-18 a=10000000.有8位,恰好和byte能表示8位相同,所以不会有数据丢失。
但是byte能表示的范围是-128~127,10000000是-128的补码,所以最后显示-128.
SKY_b 跳转到问题位置 答案时间:2020-10-14 a=128 二进制为10000000 8位byte类型二进制的范围bai为-128到du127,因为首位为符号位,所以正数到127-01111111,就到头了,所以正数最大为127;-128的二进制位128的补码10000000,因为“正数128的二进制为10000000”,这是关键点,有人会想“正数128的二进制为10000000”这不负数吗,其实不然,只是byte类型首位为符号位而引起的,否则正数最大也不会是127,不多说了,自己体会吧
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2020-09-19
整型和整型进行运算的时候,如果两边的值都是小于或者等于int的,那么其结果就是int, 这个不认同, 和long相加就是long型
2020-05-28
代码报错了
2020-05-15
写一个方法显示类型就好了
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 35 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|