(20)面向对象-5.处理对象

1、Java对象都是Object类的实例,都可直接调用该类中定义的方法,这些方法提供了处理Java对象的通用方法。

一、toString方法

  • 1、toString()方法是Object类里的一个实例方法,所有Java类都是Object类的子类,因此所有的Java对象都具有toString()方法。
  • toString()方法是一个非常特殊的方法,它是一个“自我描述”方法,用于告诉外界该对象具有的所有状态信息。

2、不仅如此,所有的Java对象都可以和字符串进行连接运算,当Java对象和字符串进行连接运算时,系统自动调用Java对象toString()方法的返回值和字符串进行连接运算,下面两行代码的结果也完全相同。

String pStr="";
String pStr=p.toString()+"";

3、大部分时候,重写toString()方法总是返回该对象的所有令人感兴趣的信息所组成的字符串。通常可返回如下格式的字符串:

类名[field1=值1,field=值2,...]

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

二、==和equal方法
1、Java程序中测试两个变量是否相等有两种方式:

  • 一种是利用 == 运算符
    (使用==来判断两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量的值相等,就将返回true。)

  • 一种是利用equals()方法

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

public class EqualTest {
    public static void main(String[] args){
    int it=65;
    float f1=65.0f;
    //输出true
    System.out.println("65和65.0f是否相等?"+(it==f1));

    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("st1是否和str2相等?"+(str1==str2));
    //输出true
        System.out.println("str1是否equeal str2"+(str1.equals(str2)));
}
}


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

解谜:
"hello"直接量和new String(“hello”)有什么区别呢?

  1. 当Java程序直接使用形如“hello”的字符串直接量(包括可以在编译时就计算出来的字符串值)时,JVM就将使用常量池来管理这些字符串
  2. 当使用new String(“hello”)时,JVM会先使用常量来管理“hello”直接量,再强调String类的构造器来创建一个新的String对象,新创建的String对象被保存再堆内存中。
  3. 换句话说,new String(“hello”)一共产生了两个字符串对象

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

三、重写equals()方法应该满足下列条件

  • 自反性:对任意x,x.equals(x)一定返回true
  • 对称性:对任意x和y,如果y.equals(x)返回true,则x.equals(y)也返回true
  • 传递性:对任意x,y,z,如果x.equals(y)防御true,y.equals(z)返回true,则x.equals(z)一定返回true
  • 一致性:对任意x和y,如果对象中用于等价比较的信息没有改变,那么调用x.equals(y)多少次,返回的结果应该保持一致,要么一直ture,要么一直false
  • 对任何不是null的x,x.equal(null)一定返回false

Object默认提供的equals()只是比较对象的地址,即Object类的equals()方法比较的结果与==运算符的结果完全相同。
因此,在实际应用中常常需要重写equals()方法时,相等条件是由业务要求决定的,因此equals()方法是实现,也是由业务要求决定的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值