JavaSE(三)深入理解equals()和toString()

JavaSE(三)深入理解equals()和toString()

一、String类有没有重写toString()和equals()方法?

1、String

方式一:

大部分情况下,我们采用如下这种方法来创建字符串对象 :

String s1 = "hello";
String s2 = "hello";

方式二:

实际上String不属于基本数据类型,而是一个类,那么一定存在构造方法,创建字符串对象时也可以用下面这种写法:

String s3 = new String("Test1");
String s4 = new String("Test1");

那二者有什么区别?

String str1 = "abc";    //这里面直接str1存放的是常量池中的地址值
String str2 = new String("abc");    //这里直接str2存放的是堆中的new String()的地址值,而new String()存放的是跟str1相同指向的常量池的地址值

说白了就是,str1相当于定义了一个常量而没有创建对象,str2是创建了一个新的String对象。

所以使用第一种方法定义的字符串,在判断是否相等时可以直接用“==”;使用第二种方法定义的字符串对象,判断是否相等时要用重写的equals()方法。

2、String类是否重写了equals()方法?

String s1 = "hello";
String s2 = "hello";
String s3 = new String("Test1");
String s4 = new String("Test1");
​
System.out.println(s1 == s2);       //true
System.out.println(s1.equals(s2));  //false
​
System.out.println(s3 == s4);       //false
System.out.println(s3.equals(s4));  //true
​
System.out.println(s1 == s3);       //false
System.out.println(s1.equals(s3));  //false

可见,SUN公司在编写String类时就已经重写了equals()方法,比较的不再是String对象的内存地址,而是字符串的值。

3、String类是否重写了toString()方法?

String x = "你好!";
System.out.println(x.toString());   //你好!
System.out.println(x);              //你好!

可见,String类里面也已经重写了toString()方法。

System.out.println(引用); 这里会自动调用”引用的toString()“方法。

二、总结toString()和equals():

在开发中所有的toString()方法和equals()方法都是需要重写的:

1、对于toString(),重写时可根据程序需要将对象的属性值以不同形式呈现;

2、对于equals(),重写时可根据程序的需求,来判断当对象的哪些属性值一样时代表对象相等;

3、基本数据类型比较时可以用“==”来判断;

4、判断两个字符串是否相等,最好不要用“==”,要调用字符串对象的equals()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值