黑马程序员技术交流社区
标题: 安卓基础第十一天笔记(3) [打印本页]
作者: 清风幕竹 时间: 2016-5-24 13:06
标题: 安卓基础第十一天笔记(3)
###10.19_常见对象(Object类的equals()方法)(掌握)
* A:案例演示
* a:指示其他某个对象是否与此对象“相等”(判断两个对象是否相等)。
* b:默认情况下比较的是对象的引用是否相同。
* c:由于比较对象的引用没有意义,一般建议重写该方法。
案例:
package com.itheima.object;
import com.itheima.bean.Student;
public class Demo4_Equals {
/**
* equals方法:比较两个对象是否相等,下面是Object中的equals方法,比较的是地址值,没有什么意义
* public boolean equals(Object obj) {
return (this == obj);//是调用的对象与传入的对象的比较,比较的是地址值
}
思考:equals方法比较两个对象的地址值是没有意义的,需要重写,因为在开发中通常比较的是对象中的属性值,
我们认为相同属性认为是同一个对象,这要需要在Student类中需要重写equals方法
* @param args
*/
public static void main(String[] args) {
//观察重写equals方法前后的结果
Student s1 = new Student("张三",23);
Student s2 = new Student("张三",23);
boolean b = s1.equals(s2); //比较两个对象是否相等
//当Student类没有重写equals方式时,下面两个输出都是false
System.out.println(s1 == s2);
System.out.println(b);
}
}
重写Student类中的equals方法:
package com.itheima.bean;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
//认为当姓名相同并且年龄也相同时为同一对象
//所以要先比较姓名是否相同,而姓名是String类型,通过查看api发现String类型重写了equals方法,
//而且比较的是字符串中的字符序列是否相同,正好符合要求,可以直接使用
/*
Student s = (Student)obj;
return this.name.equals(s.name)&&this.age==s.age;//age是基本数据类型,不能直接调用方法
*/
if(obj instanceof Student){
Student s = (Student)obj;
return this.name.equals(s.name)&&this.age==s.age;
}
return false;
}
}
###10.20_常见对象(==号和equals方法的区别)(掌握)
* ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值
* equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
###10.21_常见对象(Scanner的概述和方法介绍)(掌握)
* A:Scanner的概述
* B:Scanner的构造方法原理
* Scanner(InputStream source)
* System类下有一个静态的字段:
* public static final InputStream in; 标准的输入流,对应着键盘录入。
* C:一般方法
* hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
* nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符
案例:
public class Demo1_Scanner {
/**
* @param args
*/
public static void main(String[] args) {
/**
* 如果输入10回车,显示10
* 如果输入a回车,则抛出异常InputMismatchException:超出int的取值范围或者和int的类型不匹配
*/
Scanner sc = new Scanner(System.in);// 创建键盘录入对象
// int i = sc.nextInt(); //键盘录入整数存储在i中
// System.out.println(i);
if (sc.hasNextInt()) {
int i = sc.nextInt();
System.out.println(i);
} else {
System.out.println("你输入的类型错误!");
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |