equals和==在判断
int d = 128;
Integer i1 = Integer.valueOf(d);
Integer i2 = Integer.valueOf(d);
System.out.println(i1==i2);//false引用不同
System.out.println(i1.equals(i2));//true,内容d相同类名一致
==判断的是引用地址是否相同,而equals只是单纯判断内容时否相同,equals还会涉及类名是否一样呢
public boolean equals(Object obj) {
if (this == obj)//引用相同
return true;
if (obj == null)//引用为空
return false;
if (getClass() != obj.getClass())//判断类名是否同个类
return false;
Point other = (Point) obj;//向下构形(口头上的实际没有这个)
if (x != other.x)//判断内容是否一样
return false;
if (y != other.y)
return false;
return true;
}
valueOf()是类方法,
Double d1 = Double.valueOf(123.0);
//Double d1=new Double(123.0);相同
Double d2 = Double.valueOf(123.0);
System.out.println(d1==d2);//false
System.out.println(d1.equals(d2));//true
* 包装类可以将字符串解析为对应的基本类型,前提是该字符串正确描述基本数据类型
* 可以保存的值,否则解析时会抛出解析异常
*
*/
String str="123";
int d=Integer.parseInt(str);
System.out.println(d);
double dou=Double.parseDouble(str);
System.out.println(dou);
/*
* jdk5版本以及以后不报错
*新特性自动拆装箱,使得编译期在编译期间补充代码完成基本呢类型与对应的包装之间转换
*的代码,使得我们在编写源代码时可以在基本类型与引用类型之间直接赋值
*/
int a=1;
/*
* 这里触发了自动装箱特性,编译器在编译时会将代码改为:
* Integer i=Integer.valueOf(a);
* 将基本数据类型转为包装类
*/
Integer i=a;
/*
* 下面代码触发了自动拆装特性,编译器会改为:
* a=i.intValue();
* 将包装类转换为对应的基本类型
*/
a=i;
System.out.println(a);