Number in java, how does it work without a subclass?

I want to know why the result of this code:

Number x = 3;
System.out.println(x.intValue());
System.out.println(x.doubleValue());

generates

3
3.0

since Number is an abstract class in Java.

So when I need to use it, I could use it with some subclasses like Integer, Double ... etc. Now I want to know exactly how this part of the code works:

Number x = 3;
+4
source share
7 answers

Auto Boxing.

So when you do

Number x = 3;

What is compiled for

Number x = new Integer(3);

Number in java, how does it work without a subclass?

This is a false assumption. A class class has subclasses. If you look at the definition of the class Integer.

Look at the definition of the class Integer

public final class Integer
extends Number

, .

+4

:

Number x = 3;
System.out.println(x.intValue());
System.out.println(x.doubleValue());

:

Number x = 3;

x int Integer, : Number x = 3; Number x = new Integer(3);

:

System.out.println(x.intValue());

intValue :

public int intValue() {
    return value;
}

System.out.println(x.doubleValue());

doubleValue :

public double doubleValue() {
    return (double)value;
}
+3

: , , , , x Number.

, -. : :

   0: iconst_3      
   1: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
   4: astore_1      

...

1: - Integer.valueOf(int) - , int 3 Integer!

- :

 System.out.println(x.getClass());

, , Integer; !

+2

, .

(int, ) - (Integer) autoboxing

, Number x = 3; :

Number x = Integer.valueOf(3);
+1

:

public class Test {

  public static void main(String args[]) {
    Integer x = 5; // boxes int to an Integer object
    x =  x + 10;   // unboxes the Integer to a int
    System.out.println(x); 
  }
}

:

15

x , , x . x , .

0

Java AutoBoxing, , , .

Number x=3;
System.out.println(x.getClass());

, , .

Number x=3.0;
System.out.println(x.getClass());

java 3 Integer.class 3.0 Double.class.

, Integer, doubleValue(), doubleValue() Integer.class, .

public double doubleValue() {
    return (double)value;
}
0

Number DataType

: AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short

Number DataType Family

0

Source: https://habr.com/ru/post/1682206/


All Articles