给byte/short/char类型变量赋值时有发生数据类型转换吗

给byte/short/char类型变量赋值时有发生数据类型转换吗

数值型数据的字面值默认是int类型,int类型数据范围比byte/short/char的数据范围都大,为什么赋值时没有进行强制类型转换?

byte b1 = 40 ; // 将int类型的40 赋值给 byte类型的b1 

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
迎接晨曦 2020-11-28 10:49:30

同学你好,重新给同学整理一下数据转换的思路,如下所示:

1. 关于同学的理解,如下所示:

http://img1.sycdn.imooc.com//climg/5fc1b71a09503bdc05170212.jpg

同学这样理解是可以的,具体详情如下所示:

    100L因是L结尾的,会解析为long类型,long类型范围比int类型范围大,则进行赋值时,需要进行强制转换。

    byte类型比int类型小,则byte转换为int类型时,可以自动转换,但int类型转换为byte 类型,就需要进行强制转换。自动转换顺序如下所示:

http://img1.sycdn.imooc.com//climg/5fc1b8b4096e36d514030787.jpg

总结: 范围小的转换为范围大的,可以直接进行转换。则但范围大的转换为范围小的,则需要进行强制转换。

2. byte 类型属于整型类型,在byte范围(范围:-128 ~ 127)内可以直接使用整型进行赋值,不需要进行转换。但超出范围进行赋值,代表是int类型转换为byte 类型,int范围比byte 范围大,则需要进行强制转换,也就是超出byte范围内的数值就需要进行强制转换了。如下所示:

http://img1.sycdn.imooc.com//climg/5fc1b9c909e2180107270193.jpg

  • 提问者 慕前端1399731 #1

    http://img1.sycdn.imooc.com//climg/5fc1cdbb09a1491806850061.jpg

    “范围大的转换为范围小的需要进行强制转换”


    1. int的范围比byte范围大

    2. 整型字面值默认类型为int

    3.

    byte n1 = 100;

    属于int类型转byte类型,即“范围大的转换为范围小的”


    为什么没有进行强制转换?

    2020-11-28 12:15:05
  • 迎接晨曦 回复 提问者 慕前端1399731 #2

    同学你好,在Java中整型类型有四个,都可以存储整型,在类型范围内赋值不需要进行转换。但超出范围内就需要进行转换了。如:同学描述的byte类型,在byte范围(范围:-128 ~ 127)内可以直接使用整型进行赋值,不需要进行转换,但超出范围就需要进行赋值。如下图所示:

    http://img1.sycdn.imooc.com//climg/5fc1e8f10971547706790119.jpg

    ​此处同学不需要纠结,记住语法即可。

    祝学习愉快!

    2020-11-28 14:07:25
  • 提问者 慕前端1399731 回复 迎接晨曦 #3

    int n = (int) 100L;

    100也没有超出int的范围啊这里却需要进行转换

    2020-11-28 18:56:47
迎接晨曦 2020-11-25 18:13:44

同学你好,byte 数据类型是8位、有符号的,以二进制补码表示的整数(默认值是 0);所以不需要进行强制转换,直接进行赋值即可。如:

byte a = 100;
byte b = -50;
  • 提问者 慕前端1399731 #1
    不太明白。我认为 byte a = 50;(回复里没法贴代码块?)是把数据范围大的数据类型的常量赋值给数据范围小的变量,为什么不像 int n = (int) 100L;一样需要进行强制转换呢
    2020-11-25 19:16:05
  • 迎接晨曦 回复 提问者 慕前端1399731 #2

    同学你好,1. 因50并未超过byte类型的范围(范围:-128 ~ 127),所以不需要进行强制转换。当超过范围时,则就需要进行强制转换了。如下所示:

    ​byte c = (byte)128;

    2. 之前是不支持在回复中添加代码块的,不过回复框贴代码块的功能上线了,同学可以重新测试一下。

    祝学习愉快!

    2020-11-26 17:08:53
  • 提问者 慕前端1399731 回复 迎接晨曦 #3
    int n = (int) 100L;


    100也没有超过int类型的范围却需要强制转换

    2020-11-26 19:00:21
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
计算机基础课
  • 参与学习       233    人
  • 解答问题       159    个

1000位程序员+大厂HR联袂推荐,面向所有程序员的计算机核心知识体系,优惠中~

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师