==和equals的区别
== :运算符
- 可以使用在基本数据类型变量和引用数据类型变量中
- 基本数据类型之间比较:
比较两个变量保存的数据是否相等
- 引用数据类型之间比较:
比较两个对象的地址值是否相同
equals()方法
- Object类中定义的equals方法与==的作用相同:比较两个句柄(引用)是否指向同一地址值(即是否指向同一个对象)
- 像String、Date、File、包装类等都对equals()方法进行了重写,重写后比较的是两个句柄(引用)指向的对象的”实体内容“是否相同
- 通常情况下,自定义类如果使用equals()方法,也是要比较两个对象的“实体内容”是否相同。即对equals()方法进行重写
toString()的使用
- 当我们输出一个对象时(System.out.println())实际上就是调用当前对象的toString()方法。详细可见println()方法的源码
- 像String、Date、File、包装类等都对toString()方法进行了重写,使得在调用对象的toString()时,返回“实体内容”的信息
- 自定义类也可以重写toString()方法,当调用此方法时,返回对象的“实体内容”
包装类的使用
针对八种基本数据类型都有与之对应的引用数据类型(包装类),使基本数据类型具有类的特征
-
包装类----->基本数据类型:调用包装类Xxx的
xxxValue()
方法 -
基本数据类型------->包装类:调用包装类的构造器(即通过创建与基本数据类型相对应的包装类即可)
在jdk5.0新特性:
自动装箱与自动拆箱
//自动装箱 int num1 = 10; Integer in1 = num1; //自动拆箱 int num2 = in1;
-
基本数据类型、包装类------>String类型:调用String类的
valueOf()
方法int num1 = 10; //方式一:连接运算 String str1 = num1 + ""; //方式二:调用String的静态方法valueOf() String str2 = String.valueOf(num1);
-
String类型------->基本数据类型、包装类:调用包装类中的
parseXxx(String s)
方法String str1 = "123"; //可能会报NumberFormatException int num1 = Integer.parseInt(str1);
面试题
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
//Integer内部定义了IntegerCache内部类,该内部类中定义了Integer[]
//保存了从-128~127范围的整数。如果使用自动装箱的方式,给Integer赋值的范围在-128~127范围内时,可以直接使用数组中的元素,不用再去new了。
//目的是提高装箱的效率
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true
Integer x = 128;//超出-128~127范围,所以新创建了一个对象
Integer y = 128;
System.out.println(m == n);//false