包装器类
①概述
在Java中基本数据类型不是类,不能创建对象,这不符合面对对象编程的思想,所有从JDK1开始,Java提供了包装器类,它将基本数据类型包装成类,这些类是Byte,Short,Integer,Long,Float,Double(这些数值类都继承了一个抽象类Number),Character,Boolean。
②构造方法
注:其他包装器类和Integer类似
public Integer(int value)
public Integer(String s)throws NumberFormatException
第二个方法中如果参数是非数字的字符串会报NumberFormatException异常。
整数转其他进制
注:其他包装器类和Integer类似
public static String toBinaryString(int i)(2进制)
public static String toOctalString(int i)(8进制)
public static String toHexString(int i)(16进制)
public static final int MAX_VALUE(int的最大值,常量)
public static final int MIN_VALUE(int的最小值,常量)
将一个十进制int值转换为2进制,8进制,16进制。例,
System.out.println(Integer.toBinaryString(120)); //1111000
System.out.println(Integer.toHexString(120)); //78
System.out.println(Integer.toOctalString(120)); //170
System.out.println(Integer.MAX_VALUE); //2147483647
System.out.println(Integer.MIN_VALUE); //-2147483648
public static String toString(int i,int radix)
将一个int值转为radix进制数,radix的范围是2-36,原因是0-9,a-z总共是36个,1进制无意义。
其他进制转整数
public static int parseInt(String s,int radix)throws NumberFormatException
将一个radix进制的s转为10进制。
public static int parseInt(String s)throws NumberFormatException
将一个String变量转为int。例,
int a = Integer.parseInt("438");
System.out.println(a); //438
public static Integer valueOf(int i)
public static Integer valueOf(String s)throws NumberFormatException
④特点
自动装箱与自动拆箱
包装器类的这个新特性是JDK5以后出现的,在使用包装器类时可以直接赋对应的值,虚拟机会将值自动装箱为对应的包装器类,同样可以将包装器类当做基本数据类型使用,虚拟机会自动拆箱为对应的基本数据类型。例,
Integer i = 28;
if (i != null) // 使用前应该判断是否为null,否则会出现空指针异常
System.out.println(++i); //29
重写equals方法
包装器类重写了equals方法,所以比较的是内容。
⑤Character类构造方法
public Character(char value)
⑥Character类常用方法
public static boolean isUpperCase(char ch) //判断ch是否是大写字符
public static boolean isLowerCase(char ch) //判断ch是否是小写字符
public static boolean isDigit(char ch) //判断ch是否是数字字符
public static char toUpperCase(char ch) //将ch转为大写字符
public static char toLowerCase(char ch) //将ch转为小写字符
System.out.println(Character.isUpperCase('a')); //false
System.out.println(Character.isUpperCase('A')); //true
System.out.println(Character.isLowerCase('a')); //true
System.out.println(Character.isLowerCase('A')); //false
System.out.println(Character.isDigit('5')); //true
System.out.println(Character.toUpperCase('a')); //A
System.out.println(Character.toLowerCase('D')); //d
⑦包装器与基本数据类型的比较
- int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比。
Integer i1=59;
int i2=59;
System.out.println(i1==i2);
经过编译后会转变为
Integer i1 = Integer.valueOf(59);
int i2 = 59;
System.out.println(i1.intValue() == i2);
- 两个都是new出来的,==比较都为false。若要比较值是否相等,需使用equals方法进行比较。
- 两个都是非new出来的Integer,使用 == 比较,如果数在-128到127之间,则是true,否则为false。因为常量池。
2.BigInteger类
①概述
由于Integer类的最大值为2147483647,超出它的最大值就无法得出正确的结果了。为了解决这一问题,Java提供了BigInteger类,它是java.math包下的类。
②构造方法
public BigInteger(String val)
参数为数值型字符串。
注:该类已重写toString方法。
③常用方法
public BigInteger add(BigInteger val)
public BigInteger subtract(BigInteger val)
public BigInteger multiply(BigInteger val)
public BigInteger divide(BigInteger val)
public BigInteger[] divideAndRemainder(BigInteger val) //返回包含商和余数的数组
前四个方法为加、减、乘、除。
3.System类
①概述
java.lang包下的一个类,因为没有构造方法所以不能实例化。
②常量
public static final InputStream in
public static final PrintStream out
in为输入流变量,在Scanner类和IO流中使用;out为输出流变量,在IO流中使用。
③常用方法
public static void gc()
运行垃圾回收器,底层优先调用了类的finalize方法
public static void exit(int status)
status为0表示正常退出,非0表示异常退出,都是将Java虚拟机终止。
public static long currentTimeMillis()
返回当前时间与1970.1.1的0点差的毫秒值,通常成对使用,计算程序的运行时间。例,
System.out.println(System.currentTimeMillis()); //1598962100295
long start = System.currentTimeMillis();
for(int i=0;i<100;i++) {
i=i;
}
long end = System.currentTimeMillis();
System.out.println("程序运行时间:"+(end-start)+"毫秒"); //程序运行时间:0毫秒
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
src 原数组 srcPos 原数组的位置 dest 目标数组 destPos 目标数组的位置 length 要复制的长度
int[] arr=new int[] {1,2,5,6,8};
int[] arr2=new int[] {2,6,4,3,7};
System.arraycopy(arr, 2, arr2, 1, 2);
System.out.println(Arrays.toString(arr)); //[1, 2, 5, 6, 8]
System.out.println(Arrays.toString(arr2)); //[2, 5, 6, 3, 7]