Java.lang.Number Class in Java

Most of the time, while working with numbers in java, we use primitive data types. But, Java also provides various numeric wrapper sub classes under the abstract class Number present in java.lang package. There are mainly six sub-classes under Number class.These sub-classes define some useful methods which are used frequently while dealing with numbers.

objects-numberHierarchy

These classes “wrap” the primitive data type in a corresponding object. Often, the wrapping is done by the compiler. If you use a primitive where an object is expected, the compiler boxes the primitive in its wrapper class for you. Similarly, if you use a Number object when a primitive is expected, the compiler unboxes the object for you. This is also called Autoboxing and Unboxing.

Why to use a Number class object over primitive data?

  • Constants defined by the number class, such as MIN_VALUE and MAX_VALUE, that provide the upper and lower bounds of the data type are very much useful.
  • Number class object can be used as an argument of a method that expects an object (often used when manipulating collections of numbers).
  • Class methods can be used for converting values to and from other primitive types, for converting to and from strings, and for converting between number systems (decimal, octal, hexadecimal, binary).

Methods common to all sub classes of Number:

  1. xxx xxxValue() : Here xxx represent primitive number data types (byte, short, int, long, float, double). This method is used to convert the value of this Number object to the primitive data type specified.
    Syntax : 
    byte byteValue()
    short shortValue()
    int intValue()
    long longValue()
    float floatValue()
    double doubleValue()
    Parameters : 
    ----
    Returns :
    the numeric value represented by this object
    after conversion to specified type
    
    //Java program to demonstrate xxxValue() method
    public class Test
    {
        public static void main(String[] args) 
        {
        	// Creating a Double Class object with value "6.9685"
        	Double d = new Double("6.9685");
        
        	// Converting this Double(Number) object to 
        	// different primitive data types
        	byte b = d.byteValue(); 
        	short s = d.shortValue(); 
        	int i = d.intValue(); 
        	long l = d.longValue(); 
        	float f = d.floatValue(); 
        	double d1 = d.doubleValue(); 
        		
        	System.out.println("value of d after converting it to byte : " + b);
        	System.out.println("value of d after converting it to short : " + s);
        	System.out.println("value of d after converting it to int : " + i);
        	System.out.println("value of d after converting it to long : " + l);
        	System.out.println("value of d after converting it to float : " + f);
        	System.out.println("value of d after converting it to double : " + d1);
        }
    }
    

    Output:

    value of d after converting it to byte : 6
    value of d after converting it to short : 6
    value of d after converting it to int : 6
    value of d after converting it to long : 6
    value of d after converting it to float : 6.9685
    value of d after converting it to double : 6.9685
    

    Note : While converting, possible loss of precision may occur. For example, as we can see that fraction part(“.9685”) has been left out while converting from Double object to int data type.

  2. int compareTo(NumberSubClass referenceName) : This method is used to compare this Number object to the argument specified. However, two different types cannot be compared, so both the argument and the Number object that invoke the method should be of the same type.The referenceName could be a Byte, Double, Integer, Float, Long, or Short.
    Syntax : 
    public int compareTo( NumberSubClass referenceName )
    Parameters : 
    referenceName - any NumberSubClass type value
    Returns :
    the value 0 if the Number is equal to the argument.
    the value -1 if the Number is less than the argument.
    the value 1 if the Number is greater than the argument.
    
    //Java program to demonstrate compareTo() method
    public class Test
    {
        public static void main(String[] args) 
        {
        	// creating an Integer Class object with value "10"
        	Integer i = new Integer("10");
        
        	// comparing value of i
        	System.out.println(i.compareTo(7)); 
        	System.out.println(i.compareTo(11)); 
        	System.out.println(i.compareTo(10)); 
        }
    }
    

    Output:

    1
    -1
    0
    
  3. boolean equals(Object obj) : This method determine whether this Number object is equal to the argument.
    Syntax : 
    public boolean equals(Object obj)
    Parameters : 
    obj - any object
    Returns :
    The method returns true if the argument is not null and 
    is an object of the same type and with the same numeric value,
    otherwise false.
    
    //Java program to demonstrate equals() method
    public class Test
    {
        public static void main(String[] args)
        {
        	// creating a Short Class object with value "15"
        	Short s = new Short("15");
        
        	// creating a Short Class object with value "10"
        	Short x = 10;
        
        	// creating an Integer Class object with value "15"
        	Integer y = 15;
        
        	// creating another Short Class object with value "15"
        	Short z = 15;
        
        	//comparing s with other objects
        	System.out.println(s.equals(x));
        	System.out.println(s.equals(y));
        	System.out.println(s.equals(z));
        }
    }
    

    Output:

    false
    false
    true
    
  4. Each Number sub-class contains other methods that are useful for converting numbers to and from strings and for conversion between number systems. Below are some methods in the Integer class. We will discuss them one-by-one .The Methods for the other Number sub-classes are similar. For example in case of “parseInt” method for Integer class, we have “parseShort” method for Short class.

  5. int parseInt(String s,int radix) : This method is used to get the primitive data type of a String. Radix is used to return decimal(10), octal(8), or hexadecimal(16) etc representation as output.
    Syntax : 
    static int parseInt(String s, int radix)
    Parameters : 
    s - any String representation of decimal
    radix - any radix value
    Returns :
    the integer value represented by the argument in decimal.
    Throws :
    NumberFormatException : if the string does not contain a parsable integer.
    
    //Java program to demonstrate Integer.parseInt() method
    public class Test
    {
        public static void main(String[] args)
        {
        	// parsing different strings
        	int z = Integer.parseInt("654",8); 
        	int a = Integer.parseInt("-FF", 16);
        	long l = Long.parseLong("2158611234",10); 
        		
        	System.out.println(z);
        	System.out.println(a);
        	System.out.println(l);
        		
        	// run-time NumberFormatException will occur here
        	// "Geeks" is not a parsable string
        	int x = Integer.parseInt("Geeks",8); 
        		
        	// run-time NumberFormatException will occur here
        	// (for octal(8),allowed digits are [0-7])
        	int y = Integer.parseInt("99",8); 
        		
        }
    }
    

    Output:

    428
    -255
    2158611234
    Exception in thread "main" java.lang.NumberFormatException: For input string: "Geeks"
    	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    	at java.lang.Integer.parseInt(Integer.java:580)
    	at Test.main(Test.java:17)
    
  6. int parseInt(String s) : This method is another variant of above method where by default radix is 10(decimal).
    Syntax : 
    static int parseInt(String s)
    Parameters : 
    s - any String representation of decimal
    Returns :
    the integer value represented by the argument in decimal.
    Throws :
    NumberFormatException : if the string does not contain a parsable integer.
    
    //Java program to demonstrate Integer.parseInt() method
    public class Test
    {
        public static void main(String[] args) 
        {
        	// parsing different strings
        	int z = Integer.parseInt("654"); 
        	long l = Long.parseLong("2158611234"); 
        		
        	System.out.println(z);
        	System.out.println(l);
        		
        	// run-time NumberFormatException will occur here
        	// "Geeks" is not a parsable string
        	int x = Integer.parseInt("Geeks"); 
        		
        	// run-time NumberFormatException will occur here
        	// (for decimal(10),allowed digits are [0-9])
        	int a = Integer.parseInt("-FF");
        		
        }
    }
    

    Output:

    654
    2158611234
    Exception in thread "main" java.lang.NumberFormatException: For input string: "Geeks"
    	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    	at java.lang.Integer.parseInt(Integer.java:580)
    	at java.lang.Integer.parseInt(Integer.java:615)
    	at Test.main(Test.java:15)
    
  7. String toString() : There are two variants of toString() method. They are used to get String representation of a number. The other variants of these methods are Integer.toBinaryString(int i), Integer.toHexString(int i), Integer.toOctalString(int i) which will return binary, hexa-decimal, octal string representation of specified integer(i) respectively.
    Syntax : 
    String toString()
    String toString(int i)
    Parameters : 
    String toString() - no parameter
    String toString(int i) - i: any integer value
    Returns :
    String toString() -
    returns a String object representing the value of the Number object 
    on which it is invoked.
    String toString(int i) -
    returns a decimal String object representing the specified integer(i)
    
    //Java program to demonstrate Integer.toString() 
    //and Integer.toString(int i) method
    public class Test
    {
        public static void main(String[] args)
        {
        	// demonstrating toString() method
        	Integer x = 12;
        	
        	System.out.println(x.toString()); 
        	
        	// demonstrating toString(int i) method
        	System.out.println(Integer.toString(12));
        	
        	System.out.println(Integer.toBinaryString(152));
            System.out.println(Integer.toHexString(152)); 
            System.out.println(Integer.toOctalString(152));
        }
    }
    

    Output:

    12
    12
    10011000
    98
    230
    
  8. Integer valueOf() : There are three variants of valueOf() method. All these three methods return an Integer object holding the value of a primitive integer.
    Syntax : 
    Integer valueOf(int i)
    Integer valueOf(String s)
    Integer valueOf(String s, int radix)
    Parameters : 
    i - any integer value
    s - any String representation of decimal
    radix - any radix value
    Returns :
    valueOf(int i) : an Integer object holding the valuerepresented by the int argument.
    valueOf(String s) : an Integer object holding value represented by the string argument.
    valueOf(String s, int radix) : an Integer object holding the value
     represented by the string argument with base radix.
    Throws :
    valueOf(String s) -
    NumberFormatException : if the string does not contain a parsable integer.
    valueOf(String s, int radix) -
    NumberFormatException : if the string does not contain a parsable integer.
    
    // Java program to demonstrate valueOf() method
    public class Test
    {
        public static void main(String[] args)
        {
        	// demonstrating valueOf(int i) method
        	System.out.println("Demonstrating valueOf(int i) method");
        	Integer i =Integer.valueOf(50); 
        	Double d = Double.valueOf(9.36); 
        	System.out.println(i);
        	System.out.println(d);
        		
        	// demonstrating valueOf(String s) method
        	System.out.println("Demonstrating valueOf(String s) method");
        	Integer n = Integer.valueOf("333"); 
        	Integer m = Integer.valueOf("-255"); 
        	System.out.println(n);
        	System.out.println(m);
        		
        	// demonstrating valueOf(String s,int radix) method
        	System.out.println("Demonstrating (String s,int radix) method");
        	Integer y = Integer.valueOf("333",8); 
        	Integer x = Integer.valueOf("-255",16); 
        	Long l = Long.valueOf("51688245",16); 
        	System.out.println(y);
        	System.out.println(x);
        	System.out.println(l);
        		
        	// run-time NumberFormatException will occur in below cases
        	Integer a = Integer.valueOf("Geeks");
        	Integer b = Integer.valueOf("Geeks",16); 
        }
    }
    
    

    Output:

    Demonstrating valueOf(int i) method
    50
    9.36
    Demonstrating valueOf(String s) method
    333
    -255
    Demonstrating (String s,int radix) method
    219
    -597
    1365803589
    
    Exception in thread "main" java.lang.NumberFormatException: For input string: "Geeks"
    	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    	at java.lang.Integer.parseInt(Integer.java:580)
    	at java.lang.Integer.valueOf(Integer.java:766)
    	at Test.main(Test.java:28)
    

Practice Question:
What is the output of the give java code?

public class Test
{
   public static void main(String[] args)
   {
	   Integer i = Integer.parseInt("Kona", 27);
	   System.out.println(i);
   }
}

Options :

A) NumberFormatException at run-time
B) NumberFormatException at compile-time
C) 411787

Answer :

C) 411787

Explanation :
Since radix is 27,so allowed characters in a String literal are [0-9],[A-Q](for 10 to 26).So its value will calculated as follows:
=> a*(27^0) + n*(27^1) + o*(27^2) + k*(27^3)
=> 10*1 + 23*27 + 24*27*27 + 20*27*27*27
=> 10 + 621 + 17496 + 393660
=> 411787

This article is contributed by Gaurav Miglani. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Recommended Posts:







Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.