Object() - 构造方法
boolean equals(Object obj)
public class Student extends Object {
private int id; // 用于描述学号的成员变量
private String name; // 用于描述姓名的成员变量
public Student() {
}
public Student(int id, String name) {
setId(id);
setName(name);
}
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;
}
}
public class StudentTest {
public static void main(String[] args) {
// 使用有参方式构造Student类型的两个对象并判断是否相等
Student s1 = new Student(1001, "zhangfei");
Student s2 = new Student(1002, "guanyu");
// Student s2 = s1; // 表示s2和s1表示了同一个对象
// 下面调用从Object类中继承下来的equals方法,该方法默认比较两个对象的地址
boolean b1 = s1.equals(s2);
System.out.println("b1 = " + b1); // false
System.out.println(s1 == s2); // false
}
}
public class Student extends Object {
private int id; // 用于描述学号的成员变量
private String name; // 用于描述姓名的成员变量
public Student() {
}
public Student(int id, String name) {
setId(id);
setName(name);
}
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;
}
/**
* 为了比较两个对象的学号信息,需要重写equals方法
*/
// Student this = s1;
// Object obj = s2;
@Override
public boolean equals(Object obj) {
// 父类对象obj要强转,才能调用子类对象s2中的独有方法getId()
//return this.getId() == obj.getId();
// 判断obj指向的对象是否为Student类型的对象,是则条件成立,否则不成立
if(obj instanceof Student) {
Student st = (Student)obj;
return st.getId() == this.getId();
}
// 否则类型不一致没有可比性,则内容一定不相同
return false;
}
}
public class StudentTest {
public static void main(String[] args) {
// 使用有参方式构造Student类型的两个对象并判断是否相等
Student s1 = new Student(1001, "zhangfei");
Student s2 = new Student(1001, "guanyu");
// Student s2 = s1; // 表示s2和s1表示了同一个对象
// 下面调用从Object类中继承下来并重写的equals方法,该方法比较两个对象的内容
boolean b1 = s1.equals(s2);
System.out.println("b1 = " + b1); // true 比较内容
System.out.println(s1 == s2); // false 比较地址
}
}
public class Student extends Object {
private int id; // 用于描述学号的成员变量
private String name; // 用于描述姓名的成员变量
public Student() {
}
public Student(int id, String name) {
setId(id);
setName(name);
}
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;
}
/**
* 为了比较两个对象的学号信息,需要重写equals方法
*/
// Student this = s1;
// Object obj = s2;
@Override
public boolean equals(Object obj) {
// 当调用对象和参数对象为同一个对象时,则内容一定相同
if(this == obj) return true;
// 当调用对象不为空而参数对象为空时,则内容一定不相同
if(null == obj) return false;
// 父类对象obj要强转,才能调用子类对象s2中的独有方法getId()
//return this.getId() == obj.getId();
// 判断obj指向的对象是否为Student类型的对象,是则条件成立,否则不成立
if(obj instanceof Student) {
Student st = (Student)obj;
return st.getId() == this.getId();
}
// 否则类型不一致没有可比性,则内容一定不相同
return false;
}
}
public class StudentTest {
public static void main(String[] args) {
// 使用有参方式构造Student类型的两个对象并判断是否相等
Student s1 = new Student(1001, "zhangfei");
Student s2 = new Student(1001, "guanyu");
// Student s2 = s1; // 表示s2和s1表示了同一个对象
// 下面调用从Object类中继承下来的equals方法,该方法默认比较两个对象的地址
//boolean b1 = s1.equals(s2);
Student s3 = null;
boolean b1 = s1.equals(s3);
boolean b2 = s1.equals(s1);
//System.out.println("b1 = " + b1); // false
System.out.println(s1 == s3); // false
System.out.println("b2 = " + b2); // true
}
}
int hashCode()
public class Student extends Object {
private int id; // 用于描述学号的成员变量
private String name; // 用于描述姓名的成员变量
public Student() {
}
public Student(int id, String name) {
setId(id);
setName(name);
}
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;
}
/**
* 为了比较两个对象的学号信息,需要重写equals方法
*/
// Student this = s1;
// Object obj = s2;
@Override
public boolean equals(Object obj) {
// 当调用对象和参数对象为同一个对象时,则内容一定相同
if(this == obj) return true;
// 当调用对象不为空而参数对象为空时,则内容一定不相同
if(null == obj) return false;
// 父类对象obj要强转,才能调用子类对象s2中的独有方法getId()
//return this.getId() == obj.getId();
// 判断obj指向的对象是否为Student类型的对象,是则条件成立,否则不成立
if(obj instanceof Student) {
Student st = (Student)obj;
return st.getId() == this.getId();
}
// 否则类型不一致没有可比性,则内容一定不相同
return false;
}
/**
* 为了使得该方法的结果与equals方法的结果保持一致,从而满足Java官方的常规协定,需要重写该方法
*/
@Override
public int hashCode() {
//return getId(); // 不再代表内存地址的编号
final int type = 12;
return type*31 + getId(); // 随便怎么写,只要依赖于学号就可以了
}
}
public class StudentTest {
public static void main(String[] args) {
// 使用有参方式构造Student类型的两个对象并判断是否相等
Student s1 = new Student(1001, "zhangfei");
Student s2 = new Student(1002, "guanyu");
// Student s2 = s1; // 表示s2和s1表示了同一个对象
// 下面调用从Object类中继承下来的equals方法,该方法默认比较两个对象的地址
//boolean b1 = s1.equals(s2);
//Student s3 = null;
boolean b1 = s1.equals(s2);
//boolean b2 = s1.equals(s1);
System.out.println("b1 = " + b1);
//System.out.println(s1 == s3); // false
//System.out.println("b2 = " + b2); // true
System.out.println("--------------------------------");
// 下面调用从Object类中继承下来的hashCode方法,获取调用对象的哈希码值(内存地址的编号)
int ia = s1.hashCode();
int ib = s2.hashCode();
System.out.println("ia = " + ia);
System.out.println("ib = " + ib);
}
}
String toString()
public class Student extends Object {
private int id; // 用于描述学号的成员变量
private String name; // 用于描述姓名的成员变量
public Student() {
}
public Student(int id, String name) {
setId(id);
setName(name);
}
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;
}
/**
* 为了比较两个对象的学号信息,需要重写equals方法
*/
// Student this = s1;
// Object obj = s2;
@Override
public boolean equals(Object obj) {
// 当调用对象和参数对象为同一个对象时,则内容一定相同
if(this == obj) return true;
// 当调用对象不为空而参数对象为空时,则内容一定不相同
if(null == obj) return false;
// 父类对象obj要强转,才能调用子类对象s2中的独有方法getId()
//return this.getId() == obj.getId();
// 判断obj指向的对象是否为Student类型的对象,是则条件成立,否则不成立
if(obj instanceof Student) {
Student st = (Student)obj;
return st.getId() == this.getId();
}
// 否则类型不一致没有可比性,则内容一定不相同
return false;
}
/**
* 为了使得该方法的结果与equals方法的结果保持一致,从而满足Java官方的常规协定,需要重写该方法
*/
@Override
public int hashCode() {
//return getId(); // 不再代表内存地址的编号
final int type = 12;
return type*31 + getId(); // 随便怎么写,只要依赖于学号就可以了
}
/**
* 为了返回更有意义的字符串数据,需要重写该方法
*/
@Override
public String toString() {
return "Student[id = " + getId() + ", name = " + getName() + "]";
}
}
public class StudentTest {
public static void main(String[] args) {
// 使用有参方式构造Student类型的两个对象并判断是否相等
Student s1 = new Student(1001, "zhangfei");
Student s2 = new Student(1002, "guanyu");
// Student s2 = s1; // 表示s2和s1表示了同一个对象
// 下面调用从Object类中继承下来的equals方法,该方法默认比较两个对象的地址
//boolean b1 = s1.equals(s2);
//Student s3 = null;
boolean b1 = s1.equals(s2);
//boolean b2 = s1.equals(s1);
System.out.println("b1 = " + b1);
//System.out.println(s1 == s3); // false
//System.out.println("b2 = " + b2); // true
System.out.println("--------------------------------");
// 下面调用从Object类中继承下来的hashCode方法,获取调用对象的哈希码值(内存地址的编号)
// 当Student类中重写hashCode方法后,则调用重写后的版本
int ia = s1.hashCode();
int ib = s2.hashCode();
System.out.println("ia = " + ia);
System.out.println("ib = " + ib);
System.out.println("------------------------------");
// 下面调用从Object类中继承下来的toString方法,获取调用对象的字符串形式:包名.类名@哈希码值的十六进制
String str1 = s1.toString();
// 重写toString方法前:com.lagou.task11.Student@55d
// 重写toString方法后:str1 = Student[id = 1001, name = zhangfei]
System.out.println("str1 = " + str1);
// 打印一个引用变量时会自动调用toString方法
System.out.println(s1); // Student[id = 1001, name = zhangfei]
// 使用字符串拼接时会自动调用toString方法
String str2 = "hello" + s1;
System.out.println("str2 = " + str2); // str2 = helloStudent[id = 1001, name = zhangfei]
}
}
public class Student extends Object {
private int id; // 用于描述学号的成员变量
private String name; // 用于描述姓名的成员变量
public Student() {
}
public Student(int id, String name) {
setId(id);
setName(name);
}
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;
}
/**
* 为了比较两个对象的学号信息,需要重写equals方法
*/
// Student this = s1;
// Object obj = s2;
@Override
public boolean equals(Object obj) {
// 当调用对象和参数对象为同一个对象时,则内容一定相同
if(this == obj) return true;
// 当调用对象不为空而参数对象为空时,则内容一定不相同
if(null == obj) return false;
// 父类对象obj要强转,才能调用子类对象s2中的独有方法getId()
//return this.getId() == obj.getId();
// 判断obj指向的对象是否为Student类型的对象,是则条件成立,否则不成立
if(obj instanceof Student) {
Student st = (Student)obj;
// 以学号作为基准判断两个对象是否相同 学号int是基本数据类型,栈区内存空间中存放数据本身
// 使用 == 可以判断数据是否相同
//return st.getId() == this.getId();
// 以姓名作为基准判断两个对象是否相同,姓名String类型,为引用数据类型,栈区内存空间中放的是地址
// 使用 == 判断地址是否相同
// 也就是判断两个对象中姓名字符串的地址是否相同,不够完美
//return this.getName() == st.getName();
// 这里this.getName()是String类型,因此调用的equals方法是String类重写后的equals方法(Java官方帮写好了)
return this.getName().equals(st.getName());
}
// 否则类型不一致没有可比性,则内容一定不相同
return false;
}
/**
* 为了使得该方法的结果与equals方法的结果保持一致,从而满足Java官方的常规协定,需要重写该方法
*/
@Override
public int hashCode() {
//return getId(); // 不再代表内存地址的编号
final int type = 12;
//return type*31 + getId(); // 随便怎么写,只要依赖于学号就可以了
// 因为String类重写了equals方法,因此它也会重写hashCode方法,来保证一致性,可以直接调用
return type*31 + getName().hashCode();
}
/**
* 为了返回更有意义的字符串数据,需要重写该方法
*/
@Override
public String toString() {
return "Student[id = " + getId() + ", name = " + getName() + "]";
}
}
public class StudentTest {
public static void main(String[] args) {
// 使用有参方式构造Student类型的两个对象并判断是否相等
Student s1 = new Student(1001, "zhangfei");
Student s2 = new Student(1002, "guanyu");
// Student s2 = s1; // 表示s2和s1表示了同一个对象
// 下面调用从Object类中继承下来的equals方法,该方法默认比较两个对象的地址
//boolean b1 = s1.equals(s2);
//Student s3 = null;
boolean b1 = s1.equals(s2);
//boolean b2 = s1.equals(s1);
System.out.println("b1 = " + b1);
//System.out.println(s1 == s3); // false
//System.out.println("b2 = " + b2); // true
System.out.println("--------------------------------");
// 下面调用从Object类中继承下来的hashCode方法,获取调用对象的哈希码值(内存地址的编号)
// 当Student类中重写hashCode方法后,则调用重写后的版本
int ia = s1.hashCode();
int ib = s2.hashCode();
System.out.println("ia = " + ia);
System.out.println("ib = " + ib);
System.out.println("------------------------------");
// 下面调用从Object类中继承下来的toString方法,获取调用对象的字符串形式:包名.类名@哈希码值的十六进制
String str1 = s1.toString();
// 重写toString方法前:com.lagou.task11.Student@55d
// 重写toString方法后:str1 = Student[id = 1001, name = zhangfei]
System.out.println("str1 = " + str1);
// 打印一个引用变量时会自动调用toString方法
System.out.println(s1); // Student[id = 1001, name = zhangfei]
// 使用字符串拼接时会自动调用toString方法
String str2 = "hello" + s1;
System.out.println("str2 = " + str2); // str2 = helloStudent[id = 1001, name = zhangfei]
}
}
int num = 10;
public class MyInt {
private int num = 10;
}
public class IntegerTest {
public static void main(String[] args) {
// 1.打印Integer类中常用的常用数值
System.out.println("最大值是:" + Integer.MAX_VALUE); // -2^31
System.out.println("最大值是:" + Integer.MIN_VALUE); // 2^31-1
System.out.println("所表示的二进制位数是:" + Integer.SIZE); // 32
System.out.println("所占字节的个数是:" + Integer.BYTES); // 4
System.out.println("对应int类型的Class实例是:" + Integer.TYPE); // int
// 2.使用构造方法来构造Integer类型的对象并引用
//Integer it1 = new Integer(123);
//System.out.println("it1 = " + it1); // 自动调用toString方法 123
Integer it2 = new Integer("456");
//System.out.println("it2 = " + it2); // 自动调用toString方法 456
// 上述方法已过时,建议使用valueOf方法取代之
// int --> Integer
Integer it3 = Integer.valueOf(123);
System.out.println("it3 = " + it3); // 456
// String --> Integer
Integer it4 = Integer.valueOf("456");
System.out.println("it4 = " + it4); // 456,此处自动调用toString方法,得到的是String类型
// 获取调用对象中的整数数值,相当于从Integer类型转换到int类型
int ia = it4.intValue();
System.out.println("获取到的整数数据是:" + ia); // 456,得到的是int类型
}
}
public class IntegerTest {
public static void main(String[] args) {
// 1.打印Integer类中常用的常用数值
System.out.println("最大值是:" + Integer.MAX_VALUE); // -2^31
System.out.println("最大值是:" + Integer.MIN_VALUE); // 2^31-1
System.out.println("所表示的二进制位数是:" + Integer.SIZE); // 32
System.out.println("所占字节的个数是:" + Integer.BYTES); // 4
System.out.println("对应int类型的Class实例是:" + Integer.TYPE); // int
System.out.println("-------------------------------------------");
// 2.使用构造方法来构造Integer类型的对象并引用
//Integer it1 = new Integer(123);
//System.out.println("it1 = " + it1); // 自动调用toString方法 123
Integer it2 = new Integer("456");
//System.out.println("it2 = " + it2); // 自动调用toString方法 456
// 上述方法已过时,建议使用valueOf方法取代之,相当于从int类型到Integer类型的转换,叫做装箱
// int --> Integer
Integer it3 = Integer.valueOf(123);
System.out.println("it3 = " + it3); // 456
// String --> Integer
Integer it4 = Integer.valueOf("456");
System.out.println("it4 = " + it4); // 456,此处自动调用toString方法,得到的是String类型
// 获取调用对象中的整数数值,相当于从Integer类型转换到int类型,叫做拆箱
int ia = it4.intValue();
System.out.println("获取到的整数数据是:" + ia); // 456,得到的是int类型
System.out.println("-------------------------------------------");
// 3.从Java5开始增加了自动装箱和自动拆箱的机制
Integer it5 = 100; // 直接通过赋值运算符实现自动装箱
int ib = it5; // 直接通过赋值运算符实现自动拆箱
System.out.println("-------------------------------------------");
// 4.装箱和拆箱的笔试考点
/*Integer it6 = 128;
Integer it7 = 128;
Integer it8 = new Integer(128);
Integer it9 = new Integer(128);
System.out.println(it6 == it7); // 比较地址,false
System.out.println(it6.equals(it7)); // 比较内容,true
System.out.println(it8 == it9); // 比较地址,false
System.out.println(it8.equals(it9)); // 比较内容,true*/
Integer it6 = 127;
Integer it7 = 127;
Integer it8 = new Integer(127);
Integer it9 = new Integer(127);
System.out.println(it6 == it7); // 比较地址,true,受自动装箱池技术的影响
System.out.println(it6.equals(it7)); // 比较内容,true
System.out.println(it8 == it9); // 比较地址,false
System.out.println(it8.equals(it9)); // 比较内容,true
}
}
// 实现静态方法的调用
int a = Integer.parseInt("200"); // 200
int b = Integer.parseInt("200a"); // 编译OK,运行发生NumberFormatException数字格式异常,因为有字母
int c = Integer.toBinaryString(200); // 1100 1000
int d = Integer.toString(200); // 200
int e = Integer.toOctalString(200); // 810
int f = Integer.toHexString(); // c8
// 1.构造BigDecimal类型的两个对象
BigDecimal bd1 = new BigDecimal("2.6");
BigDecimal bd2 = new BigDecimal("3.1");
// 2.使用这两个对象实现加减乘除
System.out.prinln(bd1.add(bd2)); // 5.7
... 其他的减乘除同理