将字符转换为字符和字符转换为字符的Java

将字符转换为字符和字符转换为字符的Java,java,serialization,deserialization,Java,Serialization,Deserialization,有人能解释一下为什么这个代码工作正常吗 import java.io.*; public class Array { public static void main(String[] args) throws IOException, ClassNotFoundException { FileOutputStream fo=new FileOutputStream("Character.dat"); ObjectOutputStream oos=new

有人能解释一下为什么这个代码工作正常吗

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行中,我创建了一个
字符
,并在第11行将其序列化并写入一个文件。
在第12行中,我反序列化了该对象,它返回一个
对象的引用
,因此我们必须将其向下转换为
字符
。在第12行中,我将其向下转换为char(这是一种基本数据类型,而不是类),并且仍然可以正常工作。这是为什么?

我认为,由于Java的自动装箱在幕后进行,您从一个对象到一个字符的转换,然后分配给一个字符仍然有效。这可能有助于更深入地解释它

Java使用了一种称为。这提供了从基本体到它们的外壳类再到它们的外壳类的内置强制转换。这就是为什么您可以编写
字符c='h'
而不是
字符c=新字符('h')首先

您可能希望谨慎使用此技术,因为