Достаточно просто проверить:
import java.io.*;
class Foo implements Serializable {
private String x;
private String y;
public Foo(String x, String y) {
this.x = x;
this.y = y;
}
}
public class Test {
public static void main(String[] args) throws IOException {
String x = new StringBuilder("hello").append(" world").toString();
String y = "hello world";
showSerializedSize(new Foo(x, y));
showSerializedSize(new Foo(x, x));
}
private static void showSerializedSize(Foo foo) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(foo);
oos.close();
System.out.println(baos.size());
}
}
Результаты на моей машине:
86
77
Таким образом, похоже, что дедупликация не не происходит автоматически.
Я бы не стал использовать String.intern()
сам, так как вы, вероятно, не хотите, чтобы все эти строки были в обычном пуле для интернов, но вы всегда можете использовать HashSet<String>
для создания «временного» интернабассейн.