黑马程序员技术交流社区

标题: 安卓基础第十一天笔记(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