大多数时候,在java中处理数字时,我们使用原始数据类型。但是,Java还提供了各种数字包装纸抽象类下的子类 Number 存在于java.lang包。主要有六Number 类下的子类。这些子类定义了一些在处理数字时经常使用的有用方法。
这些类“wrap”是相应对象中的原始数据类型。通常,包装是由编译器完成的。如果您在需要对象的地方使用原语,编译器会为您将原语装箱在其包装类中。同样,如果您在需要基元时使用 Number 对象,编译器会为您取消装箱该对象。这也称为自动装箱和拆箱。
为什么要使用 Number 类对象而不是原始数据?
- 由数字类定义的常量(例如 MIN_VALUE 和 MAX_VALUE)非常有用,它们提供了数据类型的上限和下限。
- Number 类对象可以用作需要对象的方法的参数(通常在操作数字集合时使用)。
- 类方法可用于将值与其他基元类型相互转换、与字符串相互转换以及在数字系统(十进制、八进制、十六进制、二进制)之间进行转换。
Number 的所有子类共有的方法:
- xxxxxxValue():这里xxx代表原始数字数据类型(byte、short、int、long、float、double)。该方法用于将值转换为这个Number 对象以原始数据类型指定。
Syntax : byte byteValue() short shortValue() int intValue() long longValue() float floatValue() double doubleValue() Parameters : ---- 返回: the numeric value represented by this object after conversion to specified type
Java
//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”)已被省略。
- intcompareTo(NumberSubClass 参考名称):这个方法是用来比较的这个指定参数的数字对象。但是,无法比较两种不同的类型,因此调用该方法的参数和 Number 对象应该是同一类型。referenceName 可以是 Byte、Double、Integer、Float、Long 或 Short。
Syntax : public int compareTo( NumberSubClass referenceName ) Parameters : referenceName - any NumberSubClass type value 返回: 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
//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
- 布尔等于(对象 obj):该方法判断是否这个Number 对象等于参数。
Syntax : public boolean equals(Object obj) Parameters : obj - any object 返回: 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
//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
- int parseInt(字符串 s,int 基数):该方法用于获取a的原始数据类型String。 Radix 用于返回十进制 (10)、八进制 (8) 或十六进制 (16) 等表示形式作为输出。
Syntax : static int parseInt(String s, int radix) Parameters : s - any String representation of decimal radix - any radix value 返回: the integer value represented by the argument in decimal. Throws : NumberFormatException : if the string does not contain a parsable integer.
Java
//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)
- int parseInt(字符串):此方法是上述方法的另一种变体,默认基数为 10(十进制)。
Syntax : static int parseInt(String s) Parameters : s - any String representation of decimal 返回: the integer value represented by the argument in decimal. Throws : NumberFormatException : if the string does not contain a parsable integer.
Java
//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)
- 字符串toString():toString() 方法有两种变体。它们用于获取数字的字符串表示形式。这些方法的其他变体是整数.toBinaryString(int i),Integer.toHexString(int i),整数.toOctalString(int i)它将分别返回指定整数(i)的二进制、hexa-decimal、八进制字符串表示形式。
Syntax : String toString() String toString(int i) Parameters : String toString() - no parameter String toString(int i) - i: any integer value 返回: 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
//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
- 整数valueOf():valueOf()方法有三种变体。所有这三个方法都返回一个包含原始整数值的 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 返回: 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
// 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)
练习题:
给定的java代码的输出是什么?
Java
public class Test
{
public static void main(String[] args)
{
Integer i = Integer.parseInt("Kona", 27);
System.out.println(i);
}
}
选项:
A) NumberFormatException at run-time B) NumberFormatException at compile-time C) 411787
回答:
C) 411787
解释:
由于基数为 27,因此字符串文字中允许的字符为 [0-9]、[A-Q](10 到 26)。因此其值将计算如下:
=> 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
相关用法
- Java Java.lang.Number.byteValue()用法及代码示例
- Java Java.lang.Number.doubleValue()用法及代码示例
- Java Java.lang.Number.floatValue()用法及代码示例
- Java Java.lang.Number.intValue()用法及代码示例
- Java Java.lang.Number.longValue()用法及代码示例
- Java Java.lang.Number.shortValue()用法及代码示例
- Java Java.lang.Boolean.booleanValue()用法及代码示例
- Java Java.lang.Boolean.compareTo()用法及代码示例
- Java Java.lang.Boolean.equals()用法及代码示例
- Java Java.lang.Boolean.getBoolean()用法及代码示例
- Java Java.lang.Boolean.hashCode()用法及代码示例
- Java Java.lang.Boolean.parseBoolean()用法及代码示例
- Java Java.lang.Boolean.toString()用法及代码示例
- Java Java.lang.Boolean.valueOf()用法及代码示例
- Java Java.lang.Byte.byteValue()用法及代码示例
- Java Java.lang.Byte.compareTo()用法及代码示例
- Java Java.lang.Byte.decode()用法及代码示例
- Java Java.lang.Byte.doubleValue()用法及代码示例
- Java Java.lang.Byte.equals()用法及代码示例
- Java Java.lang.Byte.floatValue()用法及代码示例
- Java Java.lang.Byte.hashCode()用法及代码示例
- Java Java.lang.Byte.intValue()用法及代码示例
- Java Java.lang.Byte.longValue()用法及代码示例
- Java Java.lang.Byte.parseByte()用法及代码示例
- Java Java.lang.Byte.shortValue()用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 Java.lang.Number Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。