Basically, the lesserthan is a string that is getting parsed (in base 10) to an integer. The greaterthan is already an int that is being assigned from an literal -- and the octal (base 8) literal is lesser than the value that was parsed from a string.

When you start an integer literal with a 0, for example 03112011, then the number is interpreted as a base-8 (octal) number. So 03112011 is the number 824329 (in decimal). When you parse the string "03101800" it is interpreted as a decimal number, so this is the number 3101800.

Because 824329 is less than 3101800, you'll see "true" being printed.

Another remark: Those numbers look like dates. It's not a good idea to store dates as integers in this way. Suppose that you'd do this:

Use the java.util.Date and java.util.Calendar classes if you want to work with dates. Note that those classes contain before() and after() methods to check if one date is before or after another date.