写一个方法判断一个字符串是否对称_程序员:深入理解 equals() 方法以及与 == 的区别...

equals() 方法是Object 的一部分,因此所有的引用变量都可以调用equals() 方法来判断是否与其它的引用变量相等。使用这个方法,判断两个对象是否相等和 == 判断一样,只有引用变量指向同一个对象时才会返回true。因此通常情况下会重写equals 方法 。

正确的equals()必须满足下列5个条件:

  1. 自反性。对任意 x,x.equals(x) 一定返回 true。
  2. 对称性。对任意 x 和 y ,如果 y.equals(x) 返回 true,则 x.equals(y) 也返回true。
  3. 传递性。对任意 x、y、z,如果有 x.equals(y) 返回 true,y.equals(z) 返回true,则 x.equals(z) 也返回 true。
  4. 一致性。对任意 x 和 y,如果对象中用于等价比较的信息没有改变,那么无论调用 x.equals(y) 多少次,返回的结果应该保持一致,要么一直是 true,要么一直 是 false。
  5. 非空性。对于任何不是 null 的 x,x.equals(null) 一定返回 false。

equals() 方法和 == 的区别

  1. 当使用 == 判断两个变量是否相等时
  2. 如果两个变量是基本类型的变量,且都是数值类型,只要两个变量的数值相等,则返回 true
  3. 对于两个引用类型变量,== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,只有它们指向同一个对象时,才会返回 true。

注意:

  1. == 比较的时候不一定要求数据类型一定相同,比如:int a = 100 , long b= 100L 与 double c=100.0都是相同的,因为他们都指向地址为100的堆。
  2. ==不可用于比较类型上面没有父子关系的两个对象。
  3. 默认的 Object.equals() 只是比较对象的地址。

String 的equals()方法判断两个字符串是否相等,只要两个字符串所包含的内容一样,则他们俩相等,返回true。

97f5b19eace3c740935bd6e851a6a9ca.png

如上图所示:

  • a == b , 返回true
  • a== c,返回false
  • a.equals( c),返回true

public class Test1 {

public static void main(String[] args) {

String s1 = new String("hello");

String s2 = new String("hello");

System.out.println("s1与s2是否相等: " + (s1 == s2)); // false

System.out.println("s1与s2是否相等: " + (s1.equals(s2))); // true

System.out.println("***********************************");

int a = 100;

long b = 100L;

char c = 'd';

System.out.println("a和b是否相等: " + (a == b)); // true

System.out.println("b和c是否相等: " + (b == c)); // true

System.out.println("***********************************");

Object o1 = new Object();

Object o2 = new Object();

System.out.println(o1 == o2); // false

System.out.println(o1.equals(o2)); // false

System.out.println(o1.toString().equals(o2.toString())); // false

}

}

测试结果:

public class Test2 {

public static void main(String[] args) {

String s1 = "springboot";

String s2 = "spring";

String s3 = "boot";

// 常量与常量的拼接结果存放在常量池

String s4 = "spring" + "boot";

// 拼接的时候,只要其中有一个是变量,结果就在堆中

String s5 = "spring" + "s3";

String s6 = s2 + s3;

// new String()创建的字符串保存在堆内存

String s7 = new String("springboot");

// 如果拼接的结果调用intern()方法,返回值就在常量池中

String s8 = s6.intern();

System.out.println(s1 == s4); // true

System.out.println(s1 == s5); // false

System.out.println(s1 == s6); // false

System.out.println(s1 == s7); // false

System.out.println(s1 == s8); // true

}

}

true

false

false

false

true


原文链接:https://blog.csdn.net/weixin_43570367/article/details/103080483

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值