Question

I am writing a little code in J2ME. I have a class with a method setTableId(Short tableId). Now when I try to write setTableId(100) it gives compile time error. How can I set the short value without declaring another short variable?

When setting Long value I can use setLongValue(100L) and it works. So, what does L mean here and what's the character for Short value?

Thanks

Was it helpful?

Solution

In Java integer literals are of type int unless they are suffixed with letter 'L' or 'l' (Capital L is preferred as lower case L is hard to distinguish from number 1). If suffixed with L, the literals are of type long.

The suffix does not have any special name in the Java Language Specification. Neither is there suffixes for any other integer types. So if you need short or byte literal, they must be casted:

byte foo = (byte)0;
short bar = (short)0;

In setLongValue(100L) you don't have to necessarily include L suffix because in this case the int literal is automatically widened to long. This is called widening primitive conversion in the Java Language Specification.

OTHER TIPS

There is no such thing as a byte or short literal. You need to cast to short using (short)100

You can use setTableId((short)100). I think this was changed in Java 5 so that numeric literals assigned to byte or short and within range for the target are automatically assumed to be the target type. That latest J2ME JVMs are derived from Java 4 though.

Generally you can just cast the variable to become a short.

You can also get problems like this that can be confusing. This is because the + operator promotes them to an int

enter image description here

Casting the elements won't help:

enter image description here

You need to cast the expression:

enter image description here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top