java字节或字节,请解释
我正在JAVA中创建一个新的Byte
对象,并使用Byte
构造一个String
对象,它给出了一个错误
Byte B1 = new Byte((byte)41);
String S1 = new String(B1);
但是,当我使用byte
而不是Byte
时没有问题
byte d[]= {65,48};
String s1 = new String(d);
有什么区别
你可以在下面搜索框中键入要查询的问题!
我正在JAVA中创建一个新的Byte
对象,并使用Byte
构造一个String
对象,它给出了一个错误
Byte B1 = new Byte((byte)41);
String S1 = new String(B1);
但是,当我使用byte
而不是Byte
时没有问题
byte d[]= {65,48};
String s1 = new String(d);
有什么区别
# 1 楼答案
这是因为自动装箱和拆箱的工作方式。在这里你可以得到更多信息:http://beginnersbook.com/2014/09/java-autoboxing-and-unboxing-with-examples/
# 2 楼答案
最大的区别是,在一种情况下,你使用的是数组,而在另一种情况下,你没有
然而,值得指出的是,即使在这两种情况下都使用数组,也会有差异。也就是说:
(注意:最好说
Byte[] d1
而不是Byte d1[]
;两者是等效的,但第一个变量明确指出Byte[]
是变量的类型,而第二个变量仅作为对习惯于用这种方式编写东西的C程序员的让步而包含在Java中。)这里的要点是,Java将自动装箱和自动取消装箱
Byte
和byte
。也就是说,如果你有一个Byte
变量并给它赋值byte
,它会自动转换,反之亦然。但是,这种自动装箱和自动取消装箱不适用于数组,Java不会在Byte[]
和byte[]
之间自动转换不幸的是,我没有看到在这两种数组类型之间进行转换的简单方法,除非使用Apache Commons,它具有
toObject
和toPrimitive
数组转换(请参见here)# 3 楼答案
区别在于
new String(byte[])
情况下有一个合适的构造函数重载,而new String(Byte)
情况下没有为什么
你应该如何了解更多?例如,一个类型有什么构造函数?它们是什么意思
顺便说一下,自动拆箱/加宽与本例无关。没有
String(byte)
或String(Byte)
。。。或String(Object)
构造函数。再多的拆箱或加宽也不能让这个例子起作用为了说明
new String(...)
不适用于byte