【发布时间】:2011-07-23 12:32:41
【问题描述】:
这两者有什么区别
Byte i1=new Byte(1);//complier error
byte b=1;//ok
我的问题是关于将值 1 分配给 byte ,其中 1 是 int 字面量。 但是当将 1 传递给 Byte 类构造函数时,它会给出错误
【问题讨论】:
这两者有什么区别
Byte i1=new Byte(1);//complier error
byte b=1;//ok
我的问题是关于将值 1 分配给 byte ,其中 1 是 int 字面量。 但是当将 1 传递给 Byte 类构造函数时,它会给出错误
【问题讨论】:
Byte 是一个对象。 byte 是一个原语。除此之外,这意味着Byte 引用可以保存null。
【讨论】:
如果我没记错的话,字节和字节是两个不同的关键字。
还是Java不区分大小写?
【讨论】:
Byte i1 是一个对象,而byte b 是一个原始类型。 new Byte(int) 不是 Byte 对象的有效构造函数。见here
【讨论】:
Byte i1=new Byte(1);//编译器错误
错误是因为 Byte 构造函数只接受 byte 或 String 对象作为值
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Byte.html#Byte(byte)
【讨论】:
值 1 是整数类型的文字。所以你有以下几种情况:
将文字直接分配给byte 类型的变量将导致隐式转换,因为很明显程序员想要的是字节而不是整数。
Byte ctor 采用 byte 值,编译器抱怨因为它无法对方法或 ctor 参数进行隐式转换。
【讨论】:
会发生编译时错误,因为您将整数传递给 Wrapper 类 Byte 的构造函数,编译器不会在此处进行隐式转换。
方法调用转换具体不包括整数常量的隐式缩小,这是赋值转换的一部分。
【讨论】:
“Byte”是一个Class,“byte”是默认数据类型之一。 类似的例子是“Integer”和“int”。
回到问题,编译来自字节接受“字节”或“字符串”作为参数。 所以,请尝试将代码修改为
Byte i1=new Byte((byte)1);
或
Byte i1=new Byte("1");
【讨论】: