本次对包装类进行讲解,以Integer为例着重总结;然后对==和equals进行了区分;后面会继续更新新内容;以上内容可以直接粘贴到idea运行,便于理解;
包装类:
package java_changyongleiheduixiang;
//TODO 包装类:
public class java_22 {
public static void main(String[] args) {
//TODO 常见类和对象:
//byte short int
//float double
//char
//boolean
//TODO 包装类:转换为对象的感觉
// Byte b=null;
// Short s=null;
// Integer i=null;
// Long l=null;
// Float f=null;
// Double d=null;
// Character c=null;
// Boolean bln=null;
int i=10;
//等同于将基本数据类型转化为包装类型:
//自动装箱
//Integer one=Integer.valueOf(i);
Integer one=i;//等同于上方的语法,JVM自动装箱;
//自动拆箱;
//int i1=Integer.intValue(one);
int i1=one;//与上方语法一样,
//String 与int(Integer)的转换:
//String->Integer:
String s="1234";
Integer inte=Integer.parseInt(s);
int first=inte;
System.out.println(inte);
System.out.println(first);
//int->String:
Integer show=100;
String sss=show.toString();
String sss1=String.valueOf(show);
System.out.println(sss);
System.out.println(sss1);
}
}
==和equals的区别:
package java_changyongleiheduixiang;
//TODO 比较:==和equals
public class java_26 {
public static void main(String[] args) {
//对于基本数据类型:==比较的是数值,
int i=10;
int j=10;
System.out.println(i==j);//true
double d=10.0;
System.out.println(i==d);//true
//引用数据类型:==比较的是变量指向的内存地址
String a="aaa";//这个被放到字符串常量池中,和下方new出来的不是一个地址
String b="aaa";
String c=new String("aaa");
//首先对于a和b这种赋值来说,在变量a赋值好后,创建b的时候没有新开辟空间,b也指向那个地址;
// 但是对于c这样赋值来说,new了一个新的对象,也就是新开辟了一个空间,和a与b指向的地址不同;因此下方为false
System.out.println(a==b);//true
System.out.println(a==c);//false
//一般来说比较字符串就是想比较里面的内容是否相同,==无法实现,所以说用equals方法;String类中的equals方法其实已经被重写好了
System.out.println(a.equals(c));//true
//对于String类中的equals方法已经被重写好了,但是如果新创建一个类的话,其实是object类中的equals方法,这个方法还是没有被重写的,和==没有区别;如下:
User one=new User();
User two=new User();
System.out.println(one==two);
System.out.println(one.equals(two));//可以查看源码,与String类中的equals方法不同,没有被重写,因此,如果想比较存储的东西是否相同的话而不是指向的地址是否相同就需要重写equals方法;
//包装类型:注意,其实正确的写法是Integer i1=Integer.valueOf(100),可以查看这个valueOf方法的源码如下,
// 其实有一个Integer缓存,-128到127,如果在这个范围内不会new一个新对象,如果超过这个范围,就会new一个新对象,
// 这样就会新开辟一个地址空间,那么此时用==来比较的时候就不相等了
/*public static Integer valueOf(int i) {
if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
return new Integer(i);
}*/
Integer i1=100;
Integer i2=Integer.valueOf(100);//正确写法是这个,只不过JVM给省略了;
Integer i3=128;
Integer i4=128;
System.out.println(i1==i2);//true
System.out.println(i3==i4);//false
}
}
class User{
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
}