一些类,例如java.util.Optional和java.time.LocalDateTime,是值类型类。值类型类的实例是final和不可变的。这些类有注解@jdk.internal.ValueBased,而Java 16现在会在使用synchronized关键字同步这些类时生成编译时警告。包装类也是值类型的。例如,Double类是一个值类型类
package java.lang; @jdk.internal.ValueBased public final class Double extends Number implements Comparable<Double>, Constable, ConstantDesc { }
|
-示例
public class APITester { public static void main(String[] args) { Double d = 10.0; synchronized (d) { System.out.println(d); } } }
|
APITester.java:4: warning: [synchronization] attempt to synchronize on an instance of a value-based class synchronized (d) { ^ 1 warning
|