将字符转换为char和char到Character Java

时间:2015-07-01 19:22:23

标签: 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 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(这是一种原始数据类型而不是类),并且仍然可以正常工作。那是为什么?

2 个答案:

答案 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