• Tags ,
  •         
  • www.breakyizhan.com
  •    

    Java中的Java.lang.Number类

    大多数时候,在使用java中的数字时,我们使用原始数据类型。但是,Java还在java.lang包中的抽象类Number下提供了各种数字包装子类。Number类下主要有6个子类。这些子类定义了一些在处理数字时经常使用的有用方法。byte, integer, double, short, float, long

    这些类将原始数据类型“包装”到相应的对象中。通常,包装是由编译器完成的。如果您在需要对象的地方使用原语,编译器会为您包装类中的原语。同样,如果您在预期基元时使用Number对象,则编译器将为您解开对象。这也称为Autoboxing和Unboxing。

    为什么要在原始数据上使用Number类对象?

    • 数字类定义的常量(如MIN_VALUE和MAX_VALUE)提供数据类型的上限和下限,非常有用。
    • Number类对象可以用作期望对象的方法的参数(通常用于处理数字集合)。
    • 类方法可用于将值转换为其他基本类型以及从其他基本类型转换值,用于转换字符串和从字符串转换,以及用于在数字系统(十进制,八进制,十六进制,二进制)之间进行转换。

    Number的所有子类通用的方法:

      1. xxx xxxValue():这里xxx表示原始数字数据类型(byte,short,int,long,float,double)。此方法用于将此 Number对象的值转换为指定的基本数据类型。
        句法 : 
        byte byteValue()
        short shortValue()
        int intValue()
        long longValue()
        float floatValue()
        double doubleValue()
        参数: 
        ----
        返回:
        此对象表示的数值
        转换为指定类型后
        
        //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);
            }
        }
        

        输出:

        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

        注意:转换时,可能会发生精度损失。例如,我们可以看到在从Double对象转换为int数据类型时,小数部分(“。9685”)已被省略。

      2. int compareTo(NumberSubClass referenceName):此方法用于将此 Number对象与指定的参数进行比较。但是,不能比较两种不同的类型,因此参数和调用方法的Number对象应该是相同的类型。referenceName可以是Byte,Double,Integer,Float,Long或Short。
        句法 : 
        public int compareTo(NumberSubClass referenceName)
        参数: 
        referenceName  - 任何NumberSubClass类型值
        返回:
        如果Number等于参数,则值为0。
        如果Number小于参数,则值为-1。
        如果Number大于参数,则值为1。
        
        //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)); 
            }
        }
        

        输出:

        1
        -1
        0
        
      3. boolean equals(Object obj):该方法确定 Number对象是否等于参数。
        句法 : 
        public boolean equals(Object obj)
        参数: 
        obj  - 任何对象
        返回:
        如果参数不为null,则该方法返回true 
        是相同类型和相同数值的对象,
        否则为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));
            }
        }
        

        输出:

        false
        false
        true
        

    每个Number子类都包含其他方法,这些方法可用于将数字转换为字符串以及从数字转换为数字系统。以下是Integer类中的一些方法。我们将逐个讨论它们。其他 Number子类的方法类似。例如,对于Integer类的“parseInt”方法,我们有Short类的“parseShort”方法。

    1. int parseInt(String s,int radix):此方法用于获取String的原始数据类型。基数用于返回十进制(10),八进制(8)或十六进制(16)等表示形式作为输出。
      句法 : 
      static int parseInt(String s,int radix)
      参数: 
      s  - 小数的任何字符串表示
      radix - 任何基数值
      返回:
      由十进制参数表示的整数值。
      抛出:
      NumberFormatException:如果该字符串不包含可分析的整数。
      
      //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); 
                  
          }
      }
      

      输出:

      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)
    2. int parseInt(String s):此方法是上述方法的另一种变体,默认情况下基数为10(十进制)。
      句法 : 
      static int parseInt(String s)
      参数: 
      s  - 小数的任何字符串表示
      返回:
      由十进制参数表示的整数值。
      抛出:
      NumberFormatException:如果该字符串不包含可分析的整数。
      
      //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");
                  
          }
      }
      

      输出:

      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)
    3. String toString():toString()方法有两种变体。它们用于获取数字的字符串表示形式。这些方法的其他变体是Integer.toBinaryString(int i)Integer.toHexString(int i)Integer.toOctalString(int i),它将分别返回指定整数(i)的二进制,十六进制,八进制字符串表示形式。
      句法 : 
      String toString()
      String toString(int i)
      参数: 
      String toString() - 无参数
      String toString(int i) -  i:任何整数值
      返回
      String toString() - 
      返回一个表示Number对象的值的String对象 
      在其上调用它。
      String toString(int i) - 
      返回一个表示指定整数(i)的十进制String对象,
      
      //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));
          }
      }
      

      输出:

      12
      12
      10011000
      98
      230
      
    4. Integer valueOf():valueOf()方法有三种变体。所有这三个方法都返回一个Integer对象,它保存一个原始整数的值。
      句法 : 
      Integer valueOf(int i)
      Integer valueOf(String s)
      Integer valueOf(String s, int radix)
      参数: 
      i- 任何整数值
      s  - 小数的任何字符串表示
      radix - 任何基数值
      退货:
      valueOf(int i):保存由int参数表示的值的Integer对象。
      valueOf(String s):保存由字符串参数表示的值的Integer对象。
      valueOf(String s,int radix):保存值的Integer对象
       由带有基数的字符串参数表示。
      抛出:
      valueOf(String s) - 
      NumberFormatException:如果该字符串不包含可分析的整数。
      valueOf(String s,int radix) - 
      NumberFormatException:如果该字符串不包含可分析的整数。
      
      // 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); 
          }
      }
      
      

      输出:

      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)

     
    转载请保留页面地址:https://www.breakyizhan.com/java/4446.html