`
holdbelief
  • 浏览: 707503 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

第四课时:面向对象(3)

阅读更多

一、基本数据类型的包装类

    1、

基本数据类型和包装类的对应关系

                                                    基本数据类型                                                                   包装类

                                                        byte                                                                              Byte

                                                        short                                                                             Short

                                                        int                                                                                 Integer

                                                        long                                                                               Long

                                                        char                                                                              Character

                                                        float                                                                               Float

                                                        double                                                                           Double

                                                        boolean                                                                         Boolean

    2、封装类的实例化、使用以及装箱(1.5 之后的自动装箱)和拆箱(1.5 之后的自动拆箱)参见《Java API 1.5》

    3、基础数据类型和封装类还可以通过和""进行连接运算,使之转化为字符串,例如:

      /**
       * Boolean 和 boolean 通过与空字符串进行连接操作,使之转化为 String 类型
       */
      Boolean bool = true;
      boolean bool2 = true;
      String str_bool = bool + "";
      String str_bool2 = bool2 + "";
 
      /**
       * Integer 和 int 通过与空字符串进行连接操作,使之转化为 String 类型
       */
      Integer integer = 1;
      int i = 1;
      String str_integer = integer + "";
      String str_i = i + "";
 
      /**
       * Character 和 char 通过与空字符串进行连接操作,使之转化为 String 类型
       */
      Character character = 'c';
      char c = 'c';
      String str_character = character + "";
      String str_c = c + "";

 二、处理对象

1、toString() 方法

    1.1 该方法打印出来的是:

    对象的所属类的全名 + @ + hashCode

    1.2 重写 toString() 方法

2、 == 和 equals 比较运算符

    2.1、==:

    作用于基本数据类型的变量时:当使用 == 来判断两个变量是否相等时,如果2个变量是基本类型的变量,且都是数值型(不一定要求数据类型严格相同),则只要两个变量的值相等,使用==判断就将返回true

    作用于引用类型的变量时:对于两个引用类型的变量,必须它们指向同一个对象时(即堆内存地址相同时),   == 判断才会返回true。

    == 不可用来判断没有父子关系的两个对象。

    示例:下面示例中,SubClass1 和 SubClass2 没有父子关系,即使 SubClass1 和 SubClass2 同时继承于一个类BaseClass,但是 SubClass1 和 SubClass2 之间没有任何关系。

    图片

    图片

    2.2、equals

    作用于基本数据类型的变量时:基本数据类型不属于对象,也就没有任何方法

    作用于引用类型的变量时:等同于 == 

    实质上对于引用类型的变量,== 和 equals() 方法是完全相同的。参见 Object 类的源代码:

    /**

                 * Object 类中 equals 方法的源代码,由此可以看出,对于引用类型的变量,== 和 equals 是完全相同的。

                 */

        public boolean equals(Object obj) {
         return (this == obj);
        }

    但是 String 类重写了 equals 方法。下面是 String 类的源代码:

     /**
      * String 类重写了 equals 方法,结构是只要两个 String 类型的
      * 变量包含的字符序列相同,equals 方法即返回 true,否则返回 false
      */

        public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = count;
            if (n == anotherString.count) {
         char v1[] = value;
         char v2[] = anotherString.value;
         int i = offset;
         int j = anotherString.offset;
         while (n-- != 0) {
             if (v1[i++] != v2[j++])
                  return false;
        }
         return true;
            }
        }
        return false;
       }

/**
 * Description:
 * <br/>Copyright (C), 2005-2008, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class TestEqual
{
 public static void main(String[] args)
 {
  int it = 65;
  float fl = 65.0f;
  //将输出true
  System.out.println("65和65.0f是否相等?" + (it == fl));
  char ch = 'A';
  //将输出true
  System.out.println("65和'A'是否相等?" + (it == ch));
  String str1 = new String("hello");
  String str2 = new String("hello");
  //将输出false
  System.out.println("str1和str2是否相等?" + (str1 == str2));
  //将输出true
  System.out.println("str1是否equals str2?" + (str1.equals(str2)));

  String str3 = "hello";
  String str4 = "hello";

  //将输出true,注意这里 与 new String("hello"); 的不同。

  System.out.println("str3和str4是否相等?" + (str3 == str4));

 }
}
3、重写 hashCode 方法和 equals 方法

示例:

Person 类:

package mypackage;

public class Person {
 
 private String id;
 private String name;
 private String sex;
 
 public String getId() {
  return id;
 }

 public void setId(String id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getSex() {
  return sex;
 }

 public void setSex(String sex) {
  this.sex = sex;
 }

 @Override
 public boolean equals(Object obj) {
  if((!(obj instanceof Person)) || (obj == null)){
   return false;
  }
  if(this.hashCode() != obj.hashCode()){
   return false;
  }
  
  Person c1 = (Person) obj;
  if(this.name != c1.getName() || this.id != c1.getId() || this.sex != c1.getSex()){
   return false;
  }
  
  return true;
 }

 @Override
 public int hashCode() {
  int hashCode1 = this.id.hashCode();
  int hashCode2 = this.name.hashCode();
  int hashCode3 = this.sex.hashCode();
  
  int hashCode = hashCode1 ^ hashCode2 ^ hashCode3;
  
  return hashCode;
 }
}
MainClass 类:

package mypackage;

public class MainClass {

 public static void main(String[] args) {
  Person c1 = new Person();
  Person c2 = new Person();
  Person c3 = c1;
  
  c1.setId("001");
  c1.setName("liu");
  c1.setSex("fale");
  
  c2.setId("001");
  c2.setName("liu");
  c2.setSex("fale");
  
  System.out.println(c1.hashCode());
  System.out.println(c2.hashCode());
  
  System.out.println(c1.equals(c2));
  System.out.println(c1 == c2);
  System.out.println(c1 == c3);
  
  /*
   * 注意 String a = new String("aaa"); 与 String a = "aaa"; 的不同
   */
  String a = new String("aaa");
  String b = new String("aaa");
  System.out.println(a == b);
  System.out.println(a.equals(b));
  
  String c = "aaa";
  String d = "aaa";
  System.out.println(c == d);
  
  System.out.println(a == c);
 }
}

分享到:
评论

相关推荐

    Python基础编程与实践教案第二十六课时Python面向对象编程(下).doc

    在本课时中,学生将深入学习面向对象编程的几个关键概念,包括继承、抽象基类、多态、多重继承、混合继承以及运算符重载。 1. **继承**:继承是面向对象编程中的一种机制,允许一个类(子类)从另一个类(父类)...

    C++面向对象上机练习(三)

    根据提供的文件内容,本篇面向对象上机练习主要涉及C++中的类设计、对象创建、成员函数的使用、构造函数、以及具体的工资计算业务逻辑。以下知识点将详细阐述这些方面的内容。 ### 类与对象设计 - **类的定义**:...

    C++课程-高质量C++编程_课时_大纲

    ### 第四章:类与对象 - **4.1 面向对象编程基础**:介绍类的定义,对象的创建与销毁,封装的概念。 - **4.2 构造函数与析构函数**:理解构造函数的自动调用,析构函数的用途,以及默认构造函数和拷贝构造函数。 - *...

    Windows编程和面向对象技术

    面向对象的四个核心原则——封装、继承、多态和抽象,在课程中会逐一解析。封装允许隐藏实现细节,只暴露必要的接口;继承则允许子类继承父类的属性和方法;多态是指同一消息可以被不同对象以不同方式响应;抽象则是...

    Python基础教程-第7章-Python面向对象.ppt

    在本章"Python基础教程-第7章-Python面向对象"中,我们将深入探讨这一主题。 首先,面向对象编程(OOP)是一种编程范式,它基于"对象"的概念,这些对象包含数据(属性)和操作这些数据的方法(函数)。与面向过程...

    c++的课件(c++面向对象编程语言)

    "第四章4-5.ppt"和"第四章1-3.ppt"的主题可能是"派生类与继承(一)(3课时)",这部分内容深入探讨了C++的继承机制。继承允许创建一个新的类(派生类)来扩展或修改已存在的类(基类)。通过继承,可以实现代码重用...

    《python》课程教学大纲.doc.doc

    * 第四章:列表、元组、字典和集合 * 第五章:函数与模块 * 第六章:文件 I/O * 第七章:面向对象编程 * 第八章:错误和异常 * 第九章:os、sys 模块及应用 * 第十章:正则表达式 * 第十一章:多线程及多进程编程 * ...

    python课时安排-《Python基础》课程标准-64课时.pdf

    - **面向对象编程**:讲解类、对象和继承的概念,以及如何设计和实现简单的面向对象程序。 - **文件操作和异常处理**:教授读写文件、错误处理和异常捕获。 - **数据结构**:介绍列表、元组、字典和集合,以及如何...

    部编版第二课时作业.doc

    驼峰命名法是编程中常用的变量命名规范,特别是在面向对象编程中。这种命名方式要求每个单词的首字母大写,如“myVariableName”。在创建一个由三个单词组成的变量时,例如“studentFirstName”,可以先定义这个变量...

    java学习 1第一章 概论.ppt

    在第1章“面向对象软件开发概述”中,主要讨论了从面向机器语言到面向对象语言的发展历程,强调了面向对象方法相较于传统结构化方法的优势,如提高软件的可维护性、可重用性和可扩展性。面向对象的核心概念包括将...

    基于VB.NET的Windows应用程序设计

    掌握面向对象的编程思想 能够使用Visual Studio.NET图形化界面开发环境 课时:108 课时 分为两部分 讲课部分:36 课时,课堂教学 实践部分:72 课时,课程实验 培养目标  通过本课程的学习,学生可以具备掌握使用...

    48课时 java考试题

    - 面向对象的核心在于将数据(属性)和操作这些数据的方法(行为)封装在一起形成一个对象。 8. **条件语句的结构** - `if`语句后可以跟任意数量的`else if`语句。 - `if`语句后面只能跟一个`else`语句。 9. **...

    实用软件工程电子教案

    3. 第4章(6课时):此章可能深入到软件设计,涵盖模块化设计、结构化设计和面向对象设计等方法,同时可能探讨设计模式及其应用。 4. 第7章(7课时):这一部分可能讲解软件实现,包括编程语言的选择、编码规范、版本...

    java语言程序设计1-10章课后答案(代码)

    3. **数组与集合**: 第4章通常涉及数组的使用,包括一维和多维数组,以及如何操作数组。第5章可能涵盖集合框架,如ArrayList、LinkedList、HashSet和HashMap等。代码答案会展示如何高效地存储和处理数据。 4. **...

    C++课件人名邮电大学版

    ### C++基础知识与面向对象程序设计 #### 一、课程介绍 - **课程性质与目的**:本课程作为计算机及相关专业本科生的通识基础课,旨在让学生了解面向对象的程序设计思想,掌握C++语言的基本知识。课程内容覆盖了封装...

    Scratch画图第二课时-图形变化-神奇的花.rar

    Scratch是一款由麻省理工学院(MIT)设计开发的面向儿童的编程工具,它通过图形化编程块使得编程变得简单而有趣。在这个“Scratch画图第二课时-图形变化-神奇的花.rar”资源中,我们将深入学习如何利用Scratch实现图形...

    七第二课时认识整时练习课.pdf

    1. 学习对象:这份资料面向的是七年级的学生,即初一的学生,他们通常在12-13岁之间。这个年龄段的学生处于认知发展的关键期,对于时间概念的理解尤为重要。 2. 课程内容:课程的核心内容是教授学生“认识整时”。...

    《Delphi程序设计》课程教学实施细则

    - 第3章Object Pascal基本语法:讲解语言基础、控制语句、自定义数据类型、程序结构、过程与函数,以及异常处理机制和面向对象编程基础。 - 第4章Delphi基本组件功能及使用:介绍组件的理解、分类、基本特征(属性、...

    第1章立体几何初步第6课时平面的基本性质同步练习(必修2).doc

    本章的第六课时聚焦于平面的基本性质,这些性质是理解更复杂几何问题的基础。 1. 命题分析: - ① 梯形的四个顶点在同一平面内:这是正确的,因为梯形的对角线互相平分,意味着它们的交点以及四个顶点都在同一平面...

Global site tag (gtag.js) - Google Analytics