Bom dia Gabriel, tudo bem com seus estudos? Espero que sim. Muito interessante a sua pergunta, mas é bem simples de entender o que está acontecendo, olhá só!
Números iniciados com zero, desde que válidos, são interpretados com base 8 (octal), ou seja, 0300456 foi interpretado com base 8 e sua representação em base 10 é 98606.
O manual alerta sobre isso na página sobre integers https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.htmla documentação é completa e sua melhor amiga.
If the property value begins with the ASCII character 0 followed by another character, it is parsed as an octal integer exactly as by the method valueOf(java.lang.String, int) with radix 8.
getInteger
public static Integer getInteger(String nm,
Integer val)
Returns the integer value of the system property with the specified name. The first argument is treated as the name of a system property. System properties are accessible through the System.getProperty(java.lang.String) method. The string value of this property is then interpreted as an integer value, as per the Integer.decode method, and an Integer object representing this value is returned.
If the property value begins with the two ASCII characters 0x or the ASCII character #, not followed by a minus sign, then the rest of it is parsed as a hexadecimal integer exactly as by the method valueOf(java.lang.String, int) with radix 16.
If the property value begins with the ASCII character 0 followed by another character, it is parsed as an octal integer exactly as by the method valueOf(java.lang.String, int) with radix 8.
Otherwise, the property value is parsed as a decimal integer exactly as by the method valueOf(java.lang.String, int) with radix 10.
The second argument is the default value. The default value is returned if there is no property of the specified name, if the property does not have the correct numeric format, or if the specified name is empty or null.
Parameters:
nm - property name.
val - default value.
Returns:
the Integer value of the property.
See Also:
System.getProperty(java.lang.String), System.getProperty(java.lang.String, java.lang.String), decode(java.lang.String)
Esse site http://www.statman.info/conversions/octal.html faz conversões entre base 8 X base 10
Então anota aí, quando for declarar seus inteiros explicitamente:
Sem 0 na frente para base 10 (decimal)Com 0 na frente para base 8 (octal)Com 0x ou # na frente para base 16 (hexadecimal)