A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bushangkoukou 中级黑马   /  2013-5-22 16:55  /  2383 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 bushangkoukou 于 2013-5-22 23:23 编辑

                                                int b=0;
                        byte b1 = 3;
                        byte b2 = 4;
                        b=(byte)(b1+b2);
                        System.out.println(b);

为什么这个是可行的?b  不是int 数据类型么,强制转化成byte类型,怎么还能赋值给int型?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

11 个回复

倒序浏览
你这个是把byte放在int里面,当然可行了。
byte占用1个字节,int占用4个字节,怎么都能放的下,所以没问题。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
|——3  默认是int类型的。byte b1 = 3;完成了自动类型转换

b是int类型的变量(byte)(b1+b2);是byte类型的变量,因为int类型占用4个字节

byte类型的才占用1个字节。所以这样是没有问题的。
回复 使用道具 举报
基本数据类型其实就是存储的空间大小不一样,byte两个八位,int四个八位,说白了 楼主所述问题就是说byte型可以赋值到int型,这个赋值的过程就是存储的过程,自然byte型会存到int型的低两个八位中。视频中后边会出现将int的低两个八位存到byte中的情况。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
byte可以自动转换成int ,这个是java的自动类型转换功能。也就是小类型可以自动转换成大类型

回复 使用道具 举报
容量小的数据类型,自动转换转换为容量大的数据类型,不会造成精度丢失,是安全的。数据类型按容量大小排序为:
byte,short,char->int->long->float->double
byte,short,char之间不会互相转换。它们三者在计算时,首先转换为int类型。
  1.                 int b = 0;
  2.                 byte b1 = 3;
  3.                 byte b2 = 4;
  4.                
  5.                 /*        1. b1+b2 :相加后的值自动转换成int类型
  6.                  *         2. (byte) (b1 + b2) :强制将int类型转换成byte类型
  7.                  *         3. b = (byte) (b1 + b2) :将byte类型赋值给int变量,容量小的数据类型,
  8.                  *                                                             转换为容量大的数据类型,不会造成精度丢失
  9.                  */
  10.                 b = (byte) (b1 + b2);
  11.                 System.out.println(b);
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 棉/mg花/x糖 于 2013-5-22 21:38 编辑

楼主,你好,我来帮你解释这个问题!!
  1. int b=0;
  2. byte b1 = 3;
  3. byte b2 = 4;
  4. b=(byte)(b1+b2);
  5. System.out.println(b);

复制代码
这里,先说明一点:
(1)类型级别的数据赋值给类型级别的变量时会丢失精度(还有可能会报错);
(2)类型级别的数据赋值给类型级别的变量时会有个类型自动升级的过程(隐式
         的,由系统自动完成)。

这里,明显是byte数据赋值给int型数据,显然不会报错。
并且,b1,b2本身就是byte型,故(byte)(b1+b2)和(b1+b2)是完全等价的。
加不加上(byte)效果一样。

希望这个解释,能对楼主有所帮助。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
骑上最爱 发表于 2013-5-22 17:32
你这个是把byte放在int里面,当然可行了。
byte占用1个字节,int占用4个字节,怎么都能放的下,所以没问题 ...

求追加技术分啊.........谢谢啦^_^
回复 使用道具 举报
Sofoul 中级黑马 2013-5-22 22:05:30
9#
   int b=0;
                         byte b1 = 3;
                         byte b2 = 4;
                         b=(byte)(b1+b2);
                         System.out.println(b);
我觉得你写得有问题,b1,b2都是byte类型的干吗还要强制转换成byte本身就是byte。int是四个字节,把byte赋给int是不用转换类型的,因为byte会有一个自动提升的过程
回复 使用道具 举报
大神们都回复的挺好的,我就来一个对比吧

b1,b2是变量,数值是变化的,系统无法判断变量值是否在byte(-128~127)范围内,可能损失精度,如下图所示

强制转换成byte大小后运行成功。
回复 使用道具 举报
黄炳期 发表于 2013-5-22 22:09
大神们都回复的挺好的,我就来一个对比吧

b1,b2是变量,数值是变化的,系统无法判断变量值是否在byte(-128 ...

第一次回答问题;P
回复 使用道具 举报
基本数据类型其实就是存储的空间大小不一样,byte两个八位,int四个八位,说白了 楼主所述问题就是说byte型可以赋值到int型,这个赋值的过程就是存储的过程,自然byte型会存到int型的低两个八位中。视频中后边会出现将int的低两个八位存到byte中的情况。


byte 不是一个8位吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马