目录
Object
在Java继承结构中2,java.lang.Object类位于顶端。
默认父类为Object类。
Object类型的引用变量可以指向任何类型对象。
toString方法
- Java中很多地方都会默认调用toString方法,例如:
1.字符串+对象() 自动调用toString方法
2.System.out.print(任意对象) 直接调用toString方法
- 如果不重写toString方法,将使用Object的toString方法,其逻辑为:包名.类名@散列码。
- toString方法是非常有用的调试工具。
- JDK标准类库中,很多类都定义了toString方法,方便用户获得有关对象状态的必要信息。
- 强烈建议为自定义的每一个类增加toString方法。
package object;
/**
* 使用当前类测试Object常用方法
*
* @author Jack
*
*/
/**
* @author Administrator
*
*/
public class Point {
private int x;
private int y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
/**
* 通常我们使用一个类的toString方法时就应当重写它,因为Object提供的该方法意义不大。(javaAPI提供类都妥善重写过了,无需我们重写)
* 返会的字符串没有格式要求,按将来实际开发需求而定,原则上返回的字符串应当包含当前对象的属性信息。
*/
public String toString() {
// (1,2)
return "(" + x + "," + y + ")";
}
/**
* equals是Object定义的常被重写的另一个实用方法。
* equals的设计含义是比较两个对象的内容是否相同,但是Object自身提供的该方法是使用“==”比较的,因此不重写该方法没有实际意义。
*/
// public boolean equals(Object obj) {
// if (obj == null) {
// return false;
// }
// if (obj == this) {
// return true;
// }
// if (obj instanceof Point) {
// Point p = (Point) obj;
// return this.x == p.x && this.y == p.y;
//
// }
// return false;
// }
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
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;
}
}
equals方法
package object;
/**
* 测试Object的相关方法
*
* @author Jack
*
*/
public class Demo {
public static void main(String[] args) {
Point p = new Point(1, 2);
/**
* Object定义的toString()方法,意义是将当前对象转换为字符串。
* Object本身toString方法返回的字符串是该对象的地址信息,格式为:类名@地址
*/
// String str = p.toString();
// System.out.println(str);
/**
* System.out.println(Object o) 该方法会将给定对象的toString方法返回的字符串返回到控制台上。
*/
System.out.println(p);
Point p2 = new Point(1, 2);
System.out.println(p2);
System.out.println(p == p2);// false
System.out.println(p.equals(p2));// false(未重写equals) true(重写后)
}
}
包装类
包装类
- 包装类是为了解决基本类型不能直接参与面向对象开发的问题而出现的。 作用是可以将基本类型以引用类型表示。
- 包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值。
- 包装类是final的,不能定义它们的子类。
- 除了char的包装类是Characte,int的包装类是Integer,其余数据类型包装类都是数据类型本身首字母大写的包装类。
包装类常用方法
public class IntegerDemo1 {
public static void main(String[] args) {
int d = 129;
// Integer i1 = new Integer(d); 不常用
// Integer i2 = new Integer(d);
Integer i1 = Integer.valueOf(d);// 常用
Integer i2 = Integer.valueOf(d);
/**
* Integer的valueOf会重用1字节之内的整数对象
*/
System.out.println(i1 == i2);// int型一个字节-128~127范围内都会重用,超过就会new
System.out.println(i1.equals(i2));
// double和其余数据类型没有重写,都会new
// 包装类转换为基本类
int i = i1.valueOf(i1);
System.out.println(i);
double dd = i2.valueOf(i2);
System.out.println(dd);
// 从大类型转换为小类型会出现溢出现象
byte b = i1.byteValue();
System.out.println(b);
/**
* 数字类型的包装类支持两个常量 MAX_VALUE MIN_VALUE 用于表示对应基本类型的取值范围
*/
int imax = Integer.MAX_VALUE;
System.out.println(imax);// 2147483647
long lmin = Long.MIN_VALUE;
System.out.println(lmin);// -9223372036854775808
/**
* 所有的包装类都支持一个静态方法: parseXXX(String str) 可以将字符串解析为对应的基本类型.
* 前提是该字符串正确的描述了基本类型可以保存的值,否则会抛出异常!
*/
String str = "255";
//转换为int值
int in = Integer.parseInt(str);
System.out.println(in);
//转换为double值
double dou = Double.parseDouble(str);
System.out.println(dou);
//如果字符串为255.255是不能转换为int值的,因为没有正确描述基本类型可以保存的值
String str1 = "255.255";
int in1 = Integer.parseInt(str1);
System.out.println(in1);// NumberFormatException
}
}
自动拆装箱
public class IntegerDemo2 {
public static void main(String[] args) {
Integer i =1;// 自动拆装箱
int d =i;
}
}