Java instantiate Short object in Java

22,424

Solution 1

But you can do this:

Short s = 2;

Or this:

Short s = new Short((short)2);

Or this:

Short s = new Short("2");

Any of the above will work as long as the number is in the range [-2^15, 2^15-1]

Solution 2

One of the main rules in Java is that any mathematical operation's result will be stored in a large size variable to avoid truncation. For example if you are adding int with long the result will be long. Hence, any operation on byte, char, or short will result an int even if you added 1 to a byte.There are 2 ways to store the result in the same data type:

a) you do explicit casting:

short s=10;  
s=(short)(s+1);  

b) You can use the auto increment of short hand operations to ask the JVM to do implicit casting:

short s=10;  
s+=21;  

OR

short s=10;  
s++;  

if you need short or byte literal, they must be casted as there is no suffix like S or s for short:

byte foo = (byte)100000;
short bar = (short)100000;
Share:
22,424

Related videos on Youtube

Nuno Gonçalves
Author by

Nuno Gonçalves

Updated on July 18, 2020

Comments

  • Nuno Gonçalves
    Nuno Gonçalves almost 4 years

    I was wondering why we can do:

    Long l = 2L;
    Float f = 2f;
    Double d = 2d;
    

    or even

    Double d = new Double(2);
    

    and not

    Short s = 2s; //or whatever letter it could be
    

    nor

    Short s = new Short(2); //I know in this case 2 is an int but couldn't it be casted internally or something?
    

    Why do we need to take the constructors either with a String or a short.

    • Eng.Fouad
      Eng.Fouad almost 12 years
      There are no short nor byte literals in Java.
    • lynks
      lynks almost 12 years
      @Eng.Fouad is correct. 0xFF is an int in java, the >> and << operators take and return ints, shorts and bytes are just left a bit to one side. No idea why though.
  • Nuno Gonçalves
    Nuno Gonçalves almost 12 years
    Actually you can't do Short s = new Short((short) 2); Either that or my eclipse is wrong. You need to use short short = 2; and than use it on the constructor.
  • sawyer seguin
    sawyer seguin almost 12 years
    Even adding two shorts or bytes or chars will result in an int. While adding two ints will not result in a long. int is just special here. Which is another reason why DataOutput#writeShort takes an int parameter instead of short.