问题
在Java中,抽象类Number是BigDecimal、BigInteger、Byte、Double、Float、Integer、Long和Short类的超类。该类提供了六个方法,如图-1所示。
byte | byteValue() 以byte形式返回指定的数值。 |
abstract double | doubleValue() 以double形式返回指定的数值。 |
abstract float | floatValue() 以float形式返回指定的数值。 |
abstract int | intValue() 以int形式返回指定的数值。 |
abstract long | longValue() 以long形式返回指定的数值 |
short | shortValue() 以short形式返回指定的数值 |
以上六个方法中,floatValue方法和doubleValue方法在使用时,可能涉及到舍入;其它四个方法可能涉及到舍入或者取整。
本案例要求测试Number类的intValue方法和doubleValue方法,即,首先,定义Number类型的两个变量:
Number d=123.45;
Number n=123;
要求获取d对象和n对象所属的数据类型。
然后,将d对象分别转换为int类型变量和double类型变量,并输出转换后的结果。
最后,将n对象分别转换为int类型变量和double类型变量,并输出转换后的结果。
方案
首先,新建包和类,并在类中新建测试方法。
其次,使用代码d.getClass().getName()和代码n.getClass().getName()获取d对象和n对象所属的数据类型。此处只需了解这样可以获取对象所属数据类型即可。
第三,使用Number类的intValue方法和doubleValue方法,将d对象分别转换为int类型变量和double类型变量,并输出转换后的结果。
第四,使用Number类的intValue方法和doubleValue方法,将n对象分别转换为int类型变量和double类型变量,并输出转换后的结果。
步骤
实现此案例需要按照如下步骤进行。
步骤一:构建包、类以及测试方法
首先在day02包下新建名为TestNumber的类,然后在该类中新建测试方法testIntValueAndDoubleValue,代码如下所示:
package day02;
import org.junit.Test;
public class TestNumber{
/**
*测试Number的intValue方法和doubleValue方法
*/
@Test
public void testIntValueAndDoubleValue(){
}
}
步骤二:获取Number类的对象所属类型
使用代码d.getClass().getName()和代码n.getClass().getName()获取d对象和n对象所属的数据类型。此处只需了解这样可以获取对象所属数据类型即可。代码如下所示:
package day02;
import org.junit.Test;
public class TestNumber{
/**
*测试Number的intValue方法和doubleValue方法
*/
@Test
public void testIntValueAndDoubleValue(){
Number d=123.45;
Number n=123;
//输出d和n对象所属的类型
System.out.println(d.getClass().getName());//java.lang.Double
System.out.println(n.getClass().getName());//java.lang.Integer
}
}
步骤三:运行
运行步骤二中的testIntValueAndDoubleValue方法,控制台输出结果如下所示:
java.lang.Double
java.lang.Integer
从输出结果可以看出,d的所属类型为Double,n的所属类型为Integer,这是因为,123.45该直接量的类型为double,经过自动装箱以后转换为Double类型,Double类型是Number类型的子类,子类类型转换为父类类型属于自动类型转换,因此,d的所属类型为Double,同理,n的所属类型为Integer。
步骤四:将d对象分别转换为int类型变量和double类型变量,并输出转换后的结果,代码如下所示:
package day02;
import org.junit.Test;
public class TestNumber{
/**
*测试Number的intValue方法和doubleValue方法
*/
@Test
public void testIntValueAndDoubleValue(){
Number d=123.45;
Number n=123;
//输出d和n对象所属的类型
System.out.println(d.getClass().getName());//java.lang.Double
System.out.println(n.getClass().getName());//java.lang.Integer
int intValue=d.intValue();
double doubleValue=d.doubleValue();
System.out.println(intValue+","+doubleValue);//123,123.45
}
}
步骤五:运行
运行方法testIntValueAndDoubleValue,最后一条输出语句的输出内容为:
123,123.45
从输出结果上可以看出,将原本Double类型的对象d,转换为int类型后,取了d对象的整数部分。但转换为double类型后没有变化。
步骤六:将n对象分别转换为int类型变量和double类型变量
使用Number类的intValue方法和doubleValue方法,将n对象分别转换为int类型变量和double类型变量,并输出转换后的结果。
package day02;
import org.junit.Test;
public class TestNumber{
/**
*测试Number的intValue方法和doubleValue方法
*/
@Test
public void testIntValueAndDoubleValue(){
Number d=123.45;
Number n=123;
//输出d和n对象所属的类型
System.out.println(d.getClass().getName());//java.lang.Double
System.out.println(n.getClass().getName());//java.lang.Integer
int intValue=d.intValue();
double doubleValue=d.doubleValue();
System.out.println(intValue+","+doubleValue);//123,123.45
intValue=n.intValue();
doubleValue=n.doubleValue();
System.out.println(intValue+","+doubleValue);//123,123.0
}
}
步骤七:运行
再次运行testIntValueAndDoubleValue方法,最后一条输出语句的输出内容为:
123,123.0
从输出结果上可以看出,将原本Integer类型的对象n,转换为double类型后,小数点后保留一位小数。但转换为int类型后没有变化。