有人可以解释一下为什么这段代码工作正常吗?
import java.io.*;
public class Array {
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileOutputStream fo=new FileOutputStream("Character.dat");
ObjectOutputStream oos=new ObjectOutputStream(fo);
FileInputStream fi=new FileInputStream("Character.dat");
ObjectInputStream ois=new ObjectInputStream(fi);
Character c = 'h';
oos.writeObject(c);
Character arr = (char)ois.readObject();
System.out.println(arr);
fo.close();
fi.close();
oos.close();
ois.close();
}
}
在第10行,我创建了一个Character
,我在第11行将其序列化并写入文件。
在第12行中,我对该对象进行了反序列化,它返回Object
的引用,因此我们必须将其向下转换为Character
。在第12行中,我将它向下转换为char(这是一种原始数据类型而不是类),并且仍然可以正常工作。那是为什么?
答案 0 :(得分:1)
我认为你从一个对象转换为一个char,然后分配给一个Character仍然有效,因为Java的自动装箱在幕后进行。这link可能有助于更深入地解释它。
答案 1 :(得分:1)
Java使用一种名为Autoboxing and -unboxing的技术。这提供了从原语到其船体类和返回的内置强制转换。这就是为什么你可以首先写Character c = 'h'
而不是Character c = new Character('h');
。
您可能需要谨慎使用此技术,因为it can have a heavy impact to performance。