装箱与拆箱
虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性、没有方法可调用。 沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单、有效地进行常规数据处理。
这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了 Object 类的特性,要转换为 String 类型(经常有这种需要)时只要简单调用 Object 类中定义的toString()即可,而基本数据类型转换为 String 类型则要麻烦得多。为解决此类问题 ,Java为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes)。
每个包装类的对象可以封装一个相应的基本类型的数据,并提供了其它一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变。
在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:
Integer i = new Integer(10);
而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:
Integer i = 10;
这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。
那什么是拆箱呢?顾名思义,跟装箱对应,就是自动将包装器类型转换为基本数据类型:
Integer i = 10; //装箱
int n = i; //拆箱
简单一点说,装箱就是自动将基本数据类型转换为包装类类型;拆箱就是自动将包装类类型转换为基本数据类型。
下表是基本数据类型对应的包装类类型:
int(4字节) | Integer |
---|---|
byte(1字节) | Byte |
short(2字节) | Short |
long(8字节) | Long |
float(4字节) | Float |
double(8字节) | Double |
char(2字节) | Character |
boolean(1位) | Boolean |
Math 类
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
public class Test {
public static void main (String []args)
{
System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));
System.out.println("0度的余弦值:" + Math.cos(0));
System.out.println("60度的正切值:" + Math.tan(Math.PI/3));
System.out.println("1的反正切值: " + Math.atan(1));
System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI/2));
System.out.println(Math.PI);
}
}
包装类的方法
xxxValue函数
用于实现将包装类转换为xxx基本数据类型。
相关的方法有:
类型 | 方法及描述 |
---|---|
byte | byteValue():以 byte 形式返回指定的数值。 |
double | doubleValue():以 double 形式返回指定的数值。 |
float | floatValue():以 float 形式返回指定的数值。 |
int | intValue():以 int 形式返回指定的数值。 |
long | longValue():以 long 形式返回指定的数值。 |
short | shortValue():以 short 形式返回指定的数值。 |
以上各函数不接受任何的参数。
public class Test{
public static void main(String args[]){
Integer x = 5;
// 返回 byte 原生数据类型
System.out.println( x.byteValue() );//输出5
// 返回 double 原生数据类型
System.out.println(x.doubleValue());//输出5.0
// 返回 long 原生数据类型
System.out.println( x.longValue() );//输出5
}
}
valueOf函数
将一个基本数据类型转化为对应的包装类对象。
该方法是静态方法。该方法可以接收两个参数一个是字符串,一个是基数。
以Integer为例,该方法有以下几种语法格式:
static Integer valueOf(int i);//返回一个表示指定的int值的Integer实例
static Integer valueOf(String s);//返回保存指定的String的值的Integer对象
static Integer valueOf(String s, int radix);//返回一个Integer对象,以第二个参数为基数,对s中的字符进行解析
参数:
i - - Integer 对象的整数。
s - - Integer 对象的字符串。
radix - -在解析字符串 s 时使用的基数,用于指定使用的进制数。
public class Test{
public static void main(String args[]){
Integer x =Integer.valueOf(9);
Double c = Double.valueOf(5);
Float a = Float.valueOf("80");
Integer b = Integer.valueOf("444",16);// 使用16进制
System.out.println(x);//输出9
System.out.println(c);//输出5.0
System.out.println(a);//输出80.0
System.out.println(b);//输出1092
}
}
compareTo函数
该函数用于将包装类对象和函数参数进行比较,并返回比较的结果。
该方法用于两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较。
语法
public int compareTo( NumberSubClass referenceName)
//参数可以是任一种包装类对象
返回值:
如果指定的数与参数相等返回0。
如果指定的数小于参数返回 -1。
如果指定的数大于参数返回 1。
public class Test{
public static void main(String args[]){
Integer x = 5;
System.out.println(x.compareTo(3));
System.out.println(x.compareTo(5));
System.out.println(x.compareTo(8));
}
}
equals函数
用于判断一个包装类对象是否和函数参数相等。
语法
public boolean equals(Object o)
//参数可以是任一种包装类对象
返回值:
如包装类对象不为 Null,且与函数的参数类型及数值都相等返回 True,否则返回 False。
public class Test{
public static void main(String args[]){
Integer x = 5;
Integer y = 10;
Integer z =5;
Short a = 5;
System.out.println(x.equals(y));//输出flase
System.out.println(x.equals(z));//输出true
System.out.println(x.equals(a));//输出flase
}
}
toString函数
函数返回一个字符串形式的包装类的值。
该方法与valueOf函数相对应。
如果方法使用了原生的数据类型作为参数,返回原生数据类型的 String 对象值。
如果方法有两个参数, 将第一个参数以第二个参数为基数进行分解并返回分解后的字符串值。
以int为例,该方法有以下几种语法格式:
String toString();//返回表示Integer值的String对象
static String toString(int i);//返回表示指定int的String对象
public class Test{
public static void main(String args[]){
Integer x = 5;
System.out.println(x.toString());
System.out.println(Integer.toString(12));
}
}
parseInt函数
parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。
如果方法有两个参数, 使用第二个参数指定的基数,将字符串参数解析为有符号的整数。
语法:
parseInt 方法格式类似如下:
static int parseInt(String s);//返回10进制表示的整数
static int parseInt(String s, int radix);//返回以radix为基数的十进制整数
public class Test{
public static void main(String args[]){
int x =Integer.parseInt("9");//输出9
double c = Double.parseDouble("5");//输出5.0
int b = Integer.parseInt("444",16);//输出1092
System.out.println(x);
System.out.println(c);
System.out.println(b);
}
}
Math类方法
abs函数
返回参数的绝对值。参数可以是 int, float, long, double, short, byte类型。
ceil函数
对一个数进行上舍入,返回值大于或等于给定的参数。
参数可以是double 或 float 的原生数据类型。
floor函数
对一个数进行下舍入,返回一个小于或等给定的参数的数字。
参数可以是double 或 float 的原生数据类型。
rint函数
返回最接近参数的整数值。
参数为double 原始数据类型。
round函数
返回一个最接近的int、long型值。
它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。
参数可以是double 或 float 的原生数据类型。
min函数和max函数
返回两个参数中的最小、最大值。
参数可以是 int, float, long, double, short, byte类型。
random函数
用于返回一个随机数,随机数范围为 0.0 =< Math.random < 1.0。
语法:
static double random()
另有一些指数、对数函数,使用时可参考:
http://www.runoob.com/java/java-number.html
参考:
1.http://www.runoob.com/java/java-number.html
2.https://www.cnblogs.com/ok932343846/p/6749488.html