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