Java – the difference between transient final and transient final wrapper types for basic types
•
Java
What is the difference between transient final int and transient final integer
Use int:
transient final int a = 10;
Before serialization:
a = 10
After serialization:
a = 10
Use integer:
transient final Integer a = 10;
Before serialization:
a = 10
After serialization:
a = null
Full code:
public class App implements Serializable { transient final Integer transientFinal = 10; public static void main(String[] args) { try { ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream( "logInfo.out")); App a = new App(); System.out.println("Before Serialization ..."); System.out.println("transientFinalString = " + a.transientFinal); o.writeObject(a); o.close(); } catch (Exception e) { // deal with exception e.printStackTrace(); } try { ObjectInputStream in = new ObjectInputStream(new FileInputStream( "logInfo.out")); App x = (App) in.readObject(); System.out.println("After Serialization ..."); System.out.println("transientFinalString = " + x.transientFinal); } catch (Exception e) { // deal with exception e.printStackTrace(); } }
}
Solution
As described in the article
http://www.xyzws.com/Javafaq/can-transient-variables-be-declared-as-final-or-static/0
Making a field transient prevents its serialization with one exception:
If you will access the JSL mentioned, you will know
However, integer is not the original type, it is not string, so it is not considered a candidate for constant expression, so its value will not be retained after serialization
demonstration:
class SomeClass implements Serializable { public transient final int a = 10; public transient final Integer b = 10; public transient final String c = "foo"; public static void main(String[] args) throws Exception { SomeClass sc = new SomeClass(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(sc); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream( bos.toByteArray())); SomeClass sc2 = (SomeClass) ois.readObject(); System.out.println(sc2.a); System.out.println(sc2.b); System.out.println(sc2.c); } }
Output:
10 null foo
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码