一、装箱和拆箱举例
装箱
Integer m=5;
实际上详细解释是:Integer m=Integer.valueOf(5); 调用方法 public static Integer valueOf(String s) throws NumberFormatException{}
注意:Integer.parentInt()是将String类型转化为int(基本数据类型)public static int parseInt(String s) throws NumberFormatException {}
Integer.valueOf()是可以接受int参数,转化int成为Integer(封装类)
拆箱
int p=new Integer(5);
注意:自动装箱和拆箱是由编译器来完成的,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。
package web.md.util;
import org.junit.Test;
public class rrr {
@Test
public void test(){
int m=9;
String mm="9";
//转换成为Integer
System.out.println(Integer.valueOf(m)); //转换成为Integer
System.out.println(Integer.valueOf(mm).getClass()); //转换成为int型
System.out.println(Integer.parseInt(mm)); //基本类型int和封装类比较 false
System.out.println(Integer.valueOf(mm)==Integer.valueOf(m));
//基本类型int和基本类型int比较 true
System.out.println(Integer.valueOf(mm)==(int)Integer.valueOf(m));
//基本类型int和基本类型int比较 true
System.out.println(Integer.valueOf(mm)==Integer.parseInt(mm));
System.out.println(Integer.valueOf(m).equals((int)Integer.parseInt(mm)));
}
}
二、“==”与"equals"比较
int m=9;
int m2=9;
Integer n=8;
Integer n2=9;
double d=8.3d;
String ms="01022001";
1、“equals”只能是对象和基本类型比较
正确:n2.equals(m2)------>可以实现比较返回true或者false
错误:m2.equals(n2)------>不可实现比较
2、“==”只能比较基本类型和同类型间的比较(如Integer 和int或者int与Double之间,而int和String不能比较)
正确:m==n,d==m 可以实现比较
错误:m==ms 不可实现比较
特别指出:速度比较 ”==“ 大于 "equals" 比较的速度
原因:"=="只是比较地址(引用)是否相同,而"equals"比较地址中的值是否相同,不是比较地址
三、注意
使用equals方法时,建议如下方式
@Test
public void testString(){
String str=null;
//强制使用该方式!原因是该方式在str为null时,不抛出异常
System.out.println("".equals(str));
//不要使用该方式!原因是该方式在str为null时,会抛出异常,导致又一次地处理异常
System.out.println(str.equals(""));
}