// No initializers for this class because the fields/properties are initialized to defaults. object RedundantInitializersToDefault { // Constants const val constInt: Int = 0 const val constByte: Byte = 0 const val constLong: Long = 0L const val constShort: Short = 0 const val constDouble: Double = 0.0 const val constFloat: Float = 0.0f const val constBoolean: Boolean = false const val constChar: Char = '\u0000' // Properties var myIntPropFromConst: Int = constInt var myBytePropFromConst: Byte = constByte var myLongPropFromConst: Long = constLong var myShortPropFromConst: Short = constShort var myDoublePropFromConst: Double = constDouble var myFloatPropFromConst: Float = constFloat var myBooleanPropFromConst: Boolean = constBoolean var myCharPropFromConst: Char = constChar var myIntProp: Int = 0 var myByteProp: Byte = 0 var myLongProp: Long = 0L var myShortProp: Short = 0 var myDoubleProp: Double = 0.0 var myFloatProp: Float = 0.0f var myBooleanProp: Boolean = false var myCharProp: Char = '\u0000' var myStringProp: String? = null var myAnyProp: Any? = null var myObjectProp: java.lang.Object? = null var myIntegerProp: java.lang.Integer? = null // Fields @JvmField var myIntFieldFromConst: Int = constInt @JvmField var myByteFieldFromConst: Byte = constByte @JvmField var myLongFieldFromConst: Long = constLong @JvmField var myShortFieldFromConst: Short = constShort @JvmField var myDoubleFieldFromConst: Double = constDouble @JvmField var myFloatFieldFromConst: Float = constFloat @JvmField var myBooleanFieldFromConst: Boolean = constBoolean @JvmField var myCharFieldFromConst: Char = constChar @JvmField var myIntField: Int = 0 @JvmField var myByteField: Byte = 0 @JvmField var myLongField: Long = 0L @JvmField var myShortField: Short = 0 @JvmField var myDoubleField: Double = 0.0 @JvmField var myFloatField: Float = 0.0f @JvmField var myBooleanField: Boolean = false @JvmField var myCharField: Char = '\u0000' @JvmField var myStringField: String? = null @JvmField var myAnyField: Any? = null @JvmField var myObjectField: java.lang.Object? = null @JvmField var myIntegerField: java.lang.Integer? = null } object NonRedundantInitializers { // NOT redundant because the JVM's default values for floating-point types are positive 0.0. // See: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.3 var myDouble: Double = -0.0 var myFloat: Float = -0.0f } // There are 20 PUTSTATUCs in RedundantInitializersToDefault are in the setters for the 20 properties that don't have @JvmField. // There are 2 PUTSTATICs in NonRedundantInitializers are also in setters, while the other 2 are in the constructor during initialization. // There is 1 additional PUTSTATIC for both classes for the object instance. // 21 PUTSTATIC RedundantInitializersToDefault // 5 PUTSTATIC NonRedundantInitializers // 0 PUTFIELD