Java学习的第四天:
包装类的补充:
public static void main(String[] args){
Integer num1=123;
Integer num2=123;
System.out.println(num1==num2);
num1=new Integer(124);
num2=new Integer(124);
System.out.println(num1==num2);
Integer num1=128;
Integer num2=128;
System.out.println(num1==num2);
}
//输出 true false false
解释:true在Java中会自动缓存-128到127这些数然后用的时候直接取就行,false是因为在堆中分配内存每new一个就分配一个,第二个false是因为没有Java中缓存128还得重新分配。
继承的补充:
- 子类继承了父类的所有的非私有的属性和方法,可以直接调用。
- 子类在构造的时候,一定会构造一个父类,默认调用父类的无参构造器。
- 子类如果指定去调用父类的某个构造器,则显示的调用一下:super(参数列表)
- super和this当作构造器使用时,必须放在构造器的第一行,所以只能二选一
- java所有类都是Object类的子类,Object是所有类的基类。
- 子类最多只能继承一个父类(指直接继承),java中时单继承机制,我们可以使用连续继承来实现。
this和super的比较
this | super | |
---|---|---|
访问属性 | 访问本实例的属性,没有会继续向父类检索 | 访问本实例的属性,没有会继续向父类检索 |
调用方法 | 访问本实例的方法,没有会继续向父类检索 | 访问本实例的方法,没有会继续向父类检索 |
调用构造器 | 调用本类的构造器,必须放在第一行,不会向上检索 | 调用父类的构造器,必须放在第一行,不会向上检索 |
Objec祖先类:
hashcode():
加密用的。
equals方法和toString方法
package com.itheima.Homework;
public class Student {
private String name;
private int age;
private int id;
public Student(int i,int age,String name){
this.setAge(age);
this.setId(i);
this.setName(name);
}
@Override
public boolean equals(Object o){
if(this==o) return true;
if(o==null) return false;
Student student=(Student) o;
return id==student.id && student.getName().equals(name);
}
@Override
public String toString(){
return "Student{id="+id+" , name='"+name+"', age="+age+"}";
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/****************************************************************/
package com.itheima.Homework;
public class Homework {
public static void main(String[] args) {
Student s1=new Student(1,23,"zhangsan");
Student s2=new Student(1,23,"zhangsan");
System.out.println(s1.equals(s2));
System.out.println(s1);
}
}
输出结果: