how2j.cn


工具版本兼容问题
不同类型之间的数据可以互相转换,但是要满足一定的规则


本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



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;
		
	}
}
步骤 2 :

低精度向高精度转换

edit

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;
         
    }
}
步骤 3 :

高精度向低精度转换

edit

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)); } }
步骤 4 :

练习-类型转换

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
short a = 1;
short b = 2;
那么 a+b 是什么类型?
步骤 5 :

答案-类型转换

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

1分14秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


整型和整型进行运算的时候,如果两边的值都是小于或者等于int的,那么其结果就是int。 相关知识点在操作符章节

所以a+b之后得到的类型是int
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公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2022-09-04 有点蒙圈
LiangGT

练习的a+b不是=3么,3不是byte类型么,是代表什么呢?




13 个答案

余三岁
答案时间:2023-10-12
//强制类型转换
               short a = 1;
               short b = 2;
                System.out.println(a + b);
//short byte char在进行计算时,会自动转换成int类型;

余三岁
答案时间:2023-10-12
//强制类型转换
               short a = 1;
               short b = 2;

12345yida
答案时间:2023-08-14
应该整数运算默认是int类型,所以只有不管是byte还是short最后运算得到的都是int类型的值

YWC992
答案时间:2023-04-17
Java中进行二元与运算类型的提升规则 整数运算: 如果两个操作数有一个为long,则结果也为long; 没有long时,结果为int。即使操作数全为short、byte,结果也是int。 浮点运算: 如果两个操作数有一个为double,则结果为double; 只有两个操作数都是float,则结果才为float。 注意:int 与 float 运算,结果为 float。

徐秉然
答案时间:2023-04-01
short a = 1; short b1 = 2; int o =a+b1; short t = (short) (a+b1);

LWAN
答案时间:2023-03-20
short a = 1; short b = 2; 那么 a+b 是什么类型?

even87Equ
答案时间:2023-01-16
short a=1;
       short b=2;
       //是int  byte short char 运算会自动类型提升
        System.out.println(a+b);

learn杜
答案时间:2023-01-06
Java中进行二元与运算类型的提升规则 整数运算: 如果两个操作数有一个为long,则结果也为long; 没有long时,结果为int。即使操作数全为short、byte,结果也是int。 浮点运算: 如果两个操作数有一个为double,则结果为double; 只有两个操作数都是float,则结果才为float。 注意:int 与 float 运算,结果为 float。

07758633759
答案时间:2022-12-06
就是如果直接输出结果它会是int类型或者更大可以向上述一样大杯装小杯强制转换它的值,
//强制字符转换
	 short a = 1;
	 short b = 2;
	 short c =(byte)(a+b);
	 System.out.println(c);

南苛
答案时间:2022-11-02
short a=1; short b=2; //a+b为int(会自动提升为int) short c=(short)(a+b);//强制类型转换可以克服自动提升的问题

南苛
答案时间:2022-11-02
short a=1; short b=2; System.out.println(a+b); //a+b为short类型

panda1
答案时间:2022-10-31
int类型

A|Ace
答案时间:2022-09-12
3只是可以用byte类型变量储存,没说储存3的就是byte类型变量,你就算用double类型变量储存3,它也不会因为这样就变成byte



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2022-04-25 int转换为低精度为什么用int型变量转低精度报错但int型数值转就没问题
努力学习-早日上岸




int decVal = 26; byte d; d=26; 这样没问题,但是 int decVal = 26; byte d; d=decVal; 这样写就会报错不能将int转换为byte型
加载中

							

							


11 个答案

木宇
答案时间:2024-04-18
public class HelloWorld2 { //强制转换,高精度像低精度转换,需要进行强制转换 public static void main(String[] args) { int a = 127; byte b = 10; b=(byte)a; System.out.println(b); //练习 //short a = 1; //short b = 2; //那么 a+b 是什么类型? short a1 = 1; short b1 = 2; System.out.println(a1+b1); /* Java中进行二元与运算类型的提升规则 整数运算: 如果两个操作数有一个为long,则结果也为long; 没有long时,结果为int。即使操作数全为short、byte,结果也是int。 浮点运算: 如果两个操作数有一个为double,则结果为double; 只有两个操作数都是float,则结果才为float。 注意:int 与 float 运算,结果为 float*/ } }

怪异的羊
答案时间:2023-02-26
完成

云帆早日上岸
答案时间:2023-02-09
看上一节字面值里说,byte,short,int和long的值都可以通过int类型的字面值来创建,d=26是使用字面值来赋值,所以不存在类型转换的问题

开八月
答案时间:2023-02-02
public class HelloWorld { public static String getType(Object obj) { return obj.getClass().toString(); } public static void main(String[] args) { short i=1; short b=2; System.out.println(getType(i+b)); } }

seek_for_what
答案时间:2022-10-19
d=26中26不应该是int型吗,据我查阅资料java整型默认是int而不是byte

阿文6
答案时间:2022-10-12
int 型

海蓝蓝心爽爽
答案时间:2022-08-22
short a = 1; short b1 = 2; int cc = a + b1;

cy20000529
答案时间:2022-06-16
public class bian { public static void main(String[] args){ short a = 1; short b = 2; short c = (short) (a+b); System.out.println(c); }

A安1_
答案时间:2022-04-29
上面说错了,强制转换应该是Byte类型的,英文字母有误哈

A安1_
答案时间:2022-04-29
什么说错了,强制转换应该是Byte类型的,英文字母有误哈

xiaoba_java
答案时间:2022-04-26
d=26是bety型变量可以接收符合bety型范围的数据 而d=decVal,d是bety型变量,decVal是int型变量,int型变量不能直接转成bety型变量,需要强制转换d=(bety)decVal;



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-08-09 答案视频没声音
2021-07-31 我如何知道运算结果是多少
2021-07-04 高低精度转换


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 40 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 基础-变量-类型转换 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图