java--String字符串特点以及相关的常见面试题(包括==和equal的区别)

1.字符串的比较 (==和equal)

  • == 比较基本数据类型:比较的是具体的值
  • == 比较引用数据类型:比较的是对象地址值
  • String类 : public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写,这是String方法重写了equals的方法,超类object的equals的底层原理就是==。注意注意比较的是两个字符串,StringBuilder不是字符串!!!!!

2. ==案例

test1:常量池共享

package com.itheima.stringmethod;

public class Demo1Equals {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2);
    }
}
结果:
true

解析:常量池共享

test2:常量池和堆内存

package com.itheima.stringmethod;

public class Demo1Equals {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = new String("abc");
        System.out.println(s1 == s2);
    }
}
结果:
false

解析:s1在常量池中,s2在堆内存中
tips:String s2 = new String(“abc”);极其浪费内存,创建了两个对象

test3:字符串加号拼接

package com.itheima.stringmethod;

public class Demo1Equals {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "ab";
        String s3 = s2 +"c";
        System.out.println(s1 == s3);
    }
}
结果:
false

解析:字符串加号拼接时,系统底层是创建StringBuilder对象然后调用append()拼接再通过toString()转换为String类型最后存于堆内存

test4:常量优化机制

package com.itheima.stringmethod;

public class Demo1Equals {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "a"+"b"+"c";
        System.out.println(s1 == s2);
    }
}
结果:
true

解析:常量优化机制,三个字符串常量相加在编译时拼接为"abc"

3. equals案例

String类 : public boolean equalsIgnoreCase(String s) 比较两个字符串内容是否相同、忽略大小写

代码 :

3.1 test1:equalsIgnoreCase和equals

package com.itheima.stringmethod;

public class Demo1Equals {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "ABC";
        String s3 = "abc";

        // equals : 比较字符串内容, 区分大小写
        System.out.println(s1.equals(s2));//flase
        System.out.println(s1.equals(s3));//true

        // equalsIgnoreCase : 比较字符串内容, 忽略大小写
        System.out.println(s1.equalsIgnoreCase(s2));//true
    }
}
结果:
false
true
true

3.2 test2:String和StringBuilder之间的equals()

  • StringBuilder没有重写equals,StringBuffer同理
public class InterviewTest {
    public static void main(String[] args) {
        String s1 = "abc";
        StringBuilder sb = new StringBuilder("abc");
        //1.此时调用的是String类中的equals方法.
        //保证参数也是字符串,否则不会比较属性值而直接返回false
        System.out.println(s1.equals(sb)); // false

        //StringBuilder类中是没有重写equals方法,用的就是Object类中的本质是==.
        System.out.println(sb.equals(s1)); // false
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值