Object
- 在java类继承结构中,java.lang.Object类位于顶端
- Object是java提供的一个类,任何类型如果没有副类型,则默认继承Object,所以可以说 任何类都继承Object
- Object类型的引用变量可以指向任何类型对象。
- Object中封装了许多可以共用的API,比如toString,equals 等
toString
- Object类中的重要方法,用于返回对象值的字符表示
- 默认时toString方法返回的是没有意义的
类全名@散列码
- java建议重写toString,修改toString的返回值,用于Debug
- java的很多API会自动调用toString,简化编程。
例如:下面这两句打印的效果是一样的
Foo foo = new Foo();
System.out.println(p.toString());
System.out.println(p);//默认调用了p的toString方法
- Eclipse提供了快捷工具,可以自动生成toString方法,在右键-source-generate里。
equals
equals和==的区别
== 用于比较值是否相等:
- 基本类型,就是比较基本类型值是否相等
- 引用类型,比较引用的值(对象地址值)是
否相等. 地址值一样则true. - == 只能比较两个引用是否引用了同一个
对象,不能比较两个对象的内容(属性)是否
相等.
equals
Java 在Object类为全部对象定义了equals方法用于解决判断对象内容(属性)是否相等问题,简称: 判断对象是否相等
- equals 方法用于比较对象是否相等
- 默认的equals方法,其内部就是 “==”, 与 == 规则一致
- Java 建议在子类中重写, 修改为按照对象属性比较对象是否相等.
- equals 方法要与hashCode一起重写
- Eclipse 提供了功能,可以快速重写equals方法, 按照属性比较对象是否相等
包装类
- 定义: 在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本数据
类型转换为对象。所有基本类型都有一个与之对应的类,即包装类。 - java 为了性能, 设计了基本类型. 为了将基本类型转换为对象设计了包装类
- 包装类是final 的,是不可变类,并且不可被继承,toString也是如此。这是因为java认识和输出10进制全部依赖包装类中的算法! java将包装类和toString定义为final就是为避免使用者进行修改。
Number
- 8种包装类:
- Byte byte
- Short short
- Integer int
- Long long
- Float float
- Double double
- Boolean boolean
- Character char
- 前6种都是数值类型的包装类,他们有一个共同的超类Number
- Number里封装了数值类型相互转换的方法如intValue(),doubleValue等,需要注意的是转换类型时,会发生精度损失或溢出现象
- parseInt用于将字符串转换为int类型
自动包装(装箱)和自动拆包(拆箱)
- 从java5.0版本以后开始提供了自动包装功能,可以简化编码
- 简单理解就是包装类型和基本类型之间可以自动转换类型赋值。
自动包装:将基本类型自动包装为包装类型;自动拆包就是将包装类型自动转化为基本类型。 - 自动包装/拆包功能利用编译器实现的,在编译期,编译器将代码进行“编译擦除”(替换),比如下例:
Integer i = 5;//编译器把它替换为:Integer i = Integer.valueOf(5);
int n = i;//替换为:int n = i.intValue();
- 赋值,计算,参数传递,返回值等都会发生自动包装
test(2.3,6);
public static double test(Double d, Integer i){//当参数传进来时发生了自动包装
return d + i;//运算时发生了自动拆包
}
计算机和人的交互:
- Java 中与人进行交互的核心方法, 被封装到包装类和toString中.
- 将人类熟悉 10进制字符串转换为,计算机内部能够处理的2进制(基本类型是2进制)
- 将计算机内部的2进制转换为人能够识别的10进制字符串.
- 图解:
包装类和字符串组合可以处理数字的输入输出,比如我输了一个“886”,计算机得到的其实并不是数字,而是一个字符串类型的886,计算机会调用Integer.parseInt(“886”)把它转成了计算机可以识别的二进制数,反过来当计算机运算完成后需要把结果呈现出来,也会调用toString方法把二进制转化成十进制字符串显示。整个过程类似于下面这段代码
String str = "886";
//将10进制数字字符串转换为2进制int
int n = Integer.parseInt(str);
n++;
//toString(int)将2进制的int转换10进制字符串
System.out.println(Integer.toString(n));
- 应用:
我们发现人机交互主要用到了两个API:parseInt和 toString,我们自己也会用到他们
比如要计算一种商品的总价,但是只有一个各种信息融合在一起的字符串
String str=“1, 牙膏, 500, 1.28, 北京”;其中500是数量,1.28是单价,可以这样写:
String str="1, 牙膏, 500, 1.28, 北京";
String[] arr = str.split("[,,]\\s*");
double price=Double.parseDouble(arr[3]);
System.out.println(price); //1.28
int qty = Integer.parseInt(arr[2]);
double total = qty*price;
System.out.println(total);