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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yin1031468524 中级黑马   /  2013-6-8 10:35  /  1752 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yin1031468524 于 2013-6-9 22:10 编辑

package com.test;

public class Test1
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO Auto-generated method stub
                byte b;
                b = 3 + 4;  //此处为什么能通过编译b不是byte类型的吗?
               
        }

}
问题见注释部分,在网上找到一份解释说是因为效率的原因,不知道对不对,希望有人能给出详细的解释:)

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
有个自动类型提升
具体我还不太清楚 关注
回复 使用道具 举报
有个自动类型提升
具体我还不太清楚 关注
回复 使用道具 举报
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
而b=133+4 不能通过编译

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
hdsjsql 发表于 2013-6-8 11:04
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
...

是不是二个数相加之和在-128~127之间时,int类型的数可以自动向下转型
回复 使用道具 举报
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
而b=133+4 不能通过编译

正如楼上所说,这是JDK1.5以后的一个新特性byte范围内的数据创建了一个常量池的原因。
是不是二个数相加之和在-128~127之间时,int类型的数可以自动向下转型

这个和自动转型无关,java的自动转型叫自动类型提升故名思议是向上提升的,精度会提高而不会降低。正如楼上所说它是当常量来计算的,你如果把代码写成
  1. byte b;
  2.       int a=3;           b = a + 4;
复制代码
那么编译肯定就报错了
         

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这里不是类型转换的问题,因为这里只有byte类型,没有其他类型。
byte b是字节类型,但也是数值型的,和int一样,有+  -  *  /   的各种运算,只要运算后的值是在-128~127的范围内便可以。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马