String对象对比,内容对比。String.equals方法源码

对象输出的对比:

package xyz.jangle.string.test;
/**
 * @author huhj
 * @email  jangle@jangle.xyz
 * @time   2018年7月5日 下午3:24:33
 */
public class StringTest {

	public static void main(String[] args) {

		String s = new String("123");
		String ss = "123";
		String sss = "123";
		String ssss = new String("123");
		System.out.println(s==ss);		//false
		System.out.println(ss==sss);	//true	指向了相同的内存空间。
		System.out.println(sss==ssss);	//false	
		System.out.println(ssss==s);	//false 内容相同,但是是两个对象。
		
		
		sss = sss+"4";
		s=ssss;
		System.out.println(ssss==s);			//true
		System.out.println(ss==sss);			//false
		System.out.println(ss.equals(ssss));	//true
		String s1= "";
		String s2= new String();
		System.out.println(s1==s2);				//false
		
		/*
		 * ss 与sss相等,    当给String对象赋值时, 会先去查找内存中是否存在内容为"123"的对象,若存在则直接获取其引用,不存在则创建。
			所以ss与sss指向一个相同的引用。 new方法则是单独的创建一个对象,不管是否存在相同内容的对象。
		 */
		
		/*  String 的equals方法判断的逻辑是: 如果两个String是相同的对象返回true(对象相同内容必定相同)
		 * 	如果不是,则判断其内容,1、判断内容长度是否相同, 2、循环比较每个字符内容是否相同  (String 底层是用字符数组实现的)  1字符=2字节 16位
		 * 
		 */
	}

}

 

String类的equals方法源码:

 

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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值