一、基本数据类型的包装类
1、
基本数据类型和包装类的对应关系
基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
2、封装类的实例化、使用以及装箱(1.5 之后的自动装箱)和拆箱(1.5 之后的自动拆箱)参见《Java API 1.5》
3、基础数据类型和封装类还可以通过和""进行连接运算,使之转化为字符串,例如:
/**
* Boolean 和 boolean 通过与空字符串进行连接操作,使之转化为 String 类型
*/
Boolean bool = true;
boolean bool2 = true;
String str_bool = bool + "";
String str_bool2 = bool2 + "";
/**
* Integer 和 int 通过与空字符串进行连接操作,使之转化为 String 类型
*/
Integer integer = 1;
int i = 1;
String str_integer = integer + "";
String str_i = i + "";
/**
* Character 和 char 通过与空字符串进行连接操作,使之转化为 String 类型
*/
Character character = 'c';
char c = 'c';
String str_character = character + "";
String str_c = c + "";
二、处理对象
1、toString() 方法
1.1 该方法打印出来的是:
对象的所属类的全名 + @ + hashCode
1.2 重写 toString() 方法
2、 == 和 equals 比较运算符
2.1、==:
作用于基本数据类型的变量时:当使用 == 来判断两个变量是否相等时,如果2个变量是基本类型的变量,且都是数值型(不一定要求数据类型严格相同),则只要两个变量的值相等,使用==判断就将返回true
作用于引用类型的变量时:对于两个引用类型的变量,必须它们指向同一个对象时(即堆内存地址相同时), == 判断才会返回true。
== 不可用来判断没有父子关系的两个对象。
示例:下面示例中,SubClass1 和 SubClass2 没有父子关系,即使 SubClass1 和 SubClass2 同时继承于一个类BaseClass,但是 SubClass1 和 SubClass2 之间没有任何关系。
2.2、equals
作用于基本数据类型的变量时:基本数据类型不属于对象,也就没有任何方法
作用于引用类型的变量时:等同于 ==
实质上对于引用类型的变量,== 和 equals() 方法是完全相同的。参见 Object 类的源代码:
/**
* Object 类中 equals 方法的源代码,由此可以看出,对于引用类型的变量,== 和 equals 是完全相同的。
*/
public boolean equals(Object obj) {
return (this == obj);
}
但是 String 类重写了 equals 方法。下面是 String 类的源代码:
/**
* String 类重写了 equals 方法,结构是只要两个 String 类型的
* 变量包含的字符序列相同,equals 方法即返回 true,否则返回 false
*/
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
/**
* Description:
*
Copyright (C), 2005-2008, Yeeku.H.Lee
*
This program is protected by copyright laws.
*
Program Name:
*
Date:
* @author Yeeku.H.Lee [email protected]
* @version 1.0
*/
public class TestEqual
{
public static void main(String[] args)
{
int it = 65;
float fl = 65.0f;
//将输出true
System.out.println("65和65.0f是否相等?" + (it == fl));
char ch = 'A';
//将输出true
System.out.println("65和'A'是否相等?" + (it == ch));
String str1 = new String("hello");
String str2 = new String("hello");
//将输出false
System.out.println("str1和str2是否相等?" + (str1 == str2));
//将输出true
System.out.println("str1是否equals str2?" + (str1.equals(str2)));
String str3 = "hello";
String str4 = "hello";
//将输出true,注意这里 与 new String("hello"); 的不同。
System.out.println("str3和str4是否相等?" + (str3 == str4));
}
}
3、重写 hashCode 方法和 equals 方法
示例:
Person 类:
package mypackage;
public class Person {
private String id;
private String name;
private String sex;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public boolean equals(Object obj) {
if((!(obj instanceof Person)) || (obj == null)){
return false;
}
if(this.hashCode() != obj.hashCode()){
return false;
}
Person c1 = (Person) obj;
if(this.name != c1.getName() || this.id != c1.getId() || this.sex != c1.getSex()){
return false;
}
return true;
}
@Override
public int hashCode() {
int hashCode1 = this.id.hashCode();
int hashCode2 = this.name.hashCode();
int hashCode3 = this.sex.hashCode();
int hashCode = hashCode1 ^ hashCode2 ^ hashCode3;
return hashCode;
}
}
MainClass 类:
package mypackage;
public class MainClass {
public static void main(String[] args) {
Person c1 = new Person();
Person c2 = new Person();
Person c3 = c1;
c1.setId("001");
c1.setName("liu");
c1.setSex("fale");
c2.setId("001");
c2.setName("liu");
c2.setSex("fale");
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
System.out.println(c1.equals(c2));
System.out.println(c1 == c2);
System.out.println(c1 == c3);
/*
* 注意 String a = new String("aaa"); 与 String a = "aaa"; 的不同
*/
String a = new String("aaa");
String b = new String("aaa");
System.out.println(a == b);
System.out.println(a.equals(b));
String c = "aaa";
String d = "aaa";
System.out.println(c == d);
System.out.println(a == c);
}
}