黑马程序员技术交流社区

标题: 类型转换 [打印本页]

作者: yin1031468524    时间: 2013-6-8 10:35
标题: 类型转换
本帖最后由 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类型的吗?
               
        }

}
问题见注释部分,在网上找到一份解释说是因为效率的原因,不知道对不对,希望有人能给出详细的解释:)
作者: 8047107    时间: 2013-6-8 10:48
有个自动类型提升
具体我还不太清楚 关注
作者: 8047107    时间: 2013-6-8 10:49
有个自动类型提升
具体我还不太清楚 关注
作者: hdsjsql    时间: 2013-6-8 11:04
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
而b=133+4 不能通过编译
作者: yin1031468524    时间: 2013-6-8 11:23
hdsjsql 发表于 2013-6-8 11:04
b=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
...

是不是二个数相加之和在-128~127之间时,int类型的数可以自动向下转型
作者: w270307032    时间: 2013-6-8 11:40
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;
复制代码
那么编译肯定就报错了
         

作者: 不破大地    时间: 2013-6-8 14:47
这里不是类型转换的问题,因为这里只有byte类型,没有其他类型。
byte b是字节类型,但也是数值型的,和int一样,有+  -  *  /   的各种运算,只要运算后的值是在-128~127的范围内便可以。

作者: 袁梦希    时间: 2013-6-9 15:00
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2