处理对象

5.2.1.打印对象和toString方法

package code;
public class PrintObject{
    public static void main(String[] args){
         Person p = new Person("孙悟空");
         System.out.println(p);
    }
}
class Person{
    private String name;
    public Person(String name){
        this.name = name;
    }
}

toString是一个“自我描述”的方法

package code;
class Apple{
    private String color;
    private double weight;
    public void setColor(String color){
        this.color = color;
    }
    public String getColor(){
        return color;
    }
    public void setWeight(double weight){
        this.weight = weight;
    }
    public double getWeight(){
        return weight;
    }
    public Apple(){}
    public Apple(String color,double weight){
        this.color = color;
        this.weight = weight;
    }
    public String toString(){
        return("这个苹果的颜色是:" + color + ",重量是:" + weight);
    }
}
public class ToStringTest{
    public static void main(String[]args){
        Apple a = new Apple("红色",5.5);
        System.out.println(a);
    }
}

这个苹果的颜色是:红色,重量是:5.5

通过重写Apple类的toString()方法,就可以让系统在打印Apple对象时打印出该对象的“自我描述”信息。

通常将Apple类的toString()方法改为:

public String toString(){
        return "Apple[color=" + color + ",weight=" + weight + "]";
    }

Apple[color=红色,weight=5.5]

5.2.2. ==和equals方法

对于两个引用类型变量,只有指向同一个对象时,==判断才会返回true。==不可用于比较类型上没有父子关系的两个对象。

package code;
public class EqualTest{
    public static void main(String[] args){
        int it = 65;
        float fl = 65.0f;
        System.out.println("65和65.0f是否相等" + (it==fl));

        char ch = ‘A‘;
        System.out.println("65和‘A‘是否相等" + (it == ch));

        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println("str1和str2是否相等" + (str1==str2));
        System.out.println("str1是否equals str2" + str1.equals(str2));

        //由于java.lang.String与EqualTest类没有继承关系,
        //所以下面编译错误
        //System.out.println("hello" == new EqualTest());
    }
}

常量池(constant pool)专门用于管理在编译时被确定并保存在已编译的.class文件中的一些数据,它包括关于类,方法,接口中的常量,还包括字符串常量。

JVM常量池保证相同的字符串直接量只有一个,不会产生多个副本,使用new String()创建的字符串对象是运行时创建出来的,他被保存在运行时内存区,不会放入常量池

String已经重写了Object的equals()方法,String()方法判断两个字符串相等的标准是:只要两个字符串所包含的字符序列相同,通过equals()比较返回true,否则返回false

package code;
public class OverrideEqualsRight{
    public static void main(String [] args){
        Person p1 = new Person("孙悟空","12343433433");
        Person p2 = new Person("孙行者","12343433433");
        Person p3 = new Person("孙悟饭","99933433");

        System.out.println("p1和p2是否相等" + p1.equals(p2));
        System.out.println("p1和p2是否相等" + p2.equals(p3));

    }
}
class Person{
    private String name;
    private String idStr;
    public Person(){}
    public Person(String name,String idStr){
        this.name = name;
        this.idStr = idStr;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setIdStr(String idStr){
        this.idStr = idStr;
    }
    public String getIdStr(){
        return idStr;
    }
    public boolean equals(Object obj){
        //
        if(this == obj)
            return true;
        if(obj != null && obj.getClass() == Person.class){
            Person personObj = (Person)obj;
            if(this.getIdStr().equals(personObj.getIdStr())){
                return true;
            }
        }
        return false;
    }
}

p1和p2是否相等true

p1和p2是否相等false

上面程序重写了equals()方法,制定了Person对象和其他对象相等的标准,另一个对象必须是Person类的实例,且两个对象的idStr相等,即可判断两个Person对象相等。

对于instanceof运算符而言,当前面对象是后面类的实例或其子类的实例时都返回true,所以重写equals()方法判断两个对象是否为同一个类的实例时使用instanceof是有问题

时间: 2024-11-05 13:07:45

处理对象的相关文章

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

对象序列化和反序列--Hibernate的查询和新增极其相似

Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去造那些复杂数据很麻烦public class Object1 { public static void main(String args[]){ HashMap<String, Object> obj=new HashMap<String,Object>(); obj.put(&quo

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

菜鸟学python之对象类型及运算

Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型. 等号(=)用来给变量赋值. 1 变量赋值 1.1 单个变量赋值 >>> name="python" >>> print(name) python 1.2 多个变量赋值 >>> name=names="python&

java 类对象使用

在学习反射机制时,总结一下获得类对象方式: 第一种方式:通过类本身来获得对象 Class<?> classname = this.getClass(); 或者this.class 第二种方式:通过子类的实例获取父类对象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class<?> SubUserClass = UserClass.getSuperclass(); 第三种方式:通过类名加.class获取对象 C

dbutils封装对象,单列,一行一列(用)

基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name='"+name+"' and password = '"+password

Class类 获取Class对象

阅读API的Class类得知,Class 没有公共构造方法.Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的 获取Class对象的三种方式(实例采用Person类) 方式1:通过Object类的getObject()方法 Person p = new Person(); Class c = p.getClass(); 方式2: 通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方

Linux共享对象之编译参数fPIC(转)

最近在看Linux编程的基础知识,打算对一些比较有趣的知识做一些汇总备忘,本文围绕fPIC展开,学习参考见文末. 在Linux系统中,动态链接文件称为动态共享对象(DSO,Dynamic Shared Objects),简称共享对象,一般是以.so为扩展名的文件.在Windows系统中,则称为动态链接库(Dynamic Linking Library),很多以.dll为扩展名.这里只备忘Linux的共享对象. 在实现一共享对象时,最一般的编译链接命令行为: g++ -fPIC -shared t

JavaScript 对象

JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例

hibernate载入持久化对象的两种方式——get、load

一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更高.下边具体说一下get和load的不同,有些时候为了对照也会把find加进来. 1.从返回结果上对照: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法检索不到的话会返回null 2.从检索运行机制上对照: get方法和fin