java字符串常见题

字符串常见问题(笔试常考)

构造方法

public class StringDemo01 {
    public static void main(String[] args) {
        //public String();创建一个空白的字符串对象,不含有任何内容
        String s1 = new String();
        System.out.println("s1:" + s1);

        // public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
        char[] chs = {'a', 'z', 'c', 'v'};
        String s2 = new String(chs);
        System.out.println("s2:" + s2);

        //public String(byte[] bys) :根据字节数组的内容,来创建字符串对象
        byte[] bys = {97, 98, 99};
        String s3 = new String(bys);
        System.out.println("s3:" + s3);

        //String s4="abc";直接赋值的方式创建字符串对象,内容就是abc
        String s4="abc";
        System.out.println("s4:" + s4);
    }
}

常见的考题

public class StringDemo02 {
    public static void main(String[] args) {
        //构造方法的方式得到对象
        char[] chs = {'a', 'b', 'c'};
        String s1 = new String(chs);
        String s2 = new String(chs);
        System.out.println(s1 == s2);
        //结果:false

        //直接赋值的方式得到对象
        String s3 = "abc";
        String s4 = "abc";

        System.out.println(s3 == s4);
        //结果true,都指向同一个常量池
        System.out.println(s1 == s3);
        //结果:false

        String s5 = new String("abc");
        //这句实际上创建了两个对象,浪费内存,最好不要用
        System.out.println( s3 == s5);
        //结果:false
    }

}
public class StringDemo03 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "ab";
        String s3 = s2 + "c";
        System.out.println(s1==s3);//false
        /*常量池里有abc,ab,c
        * 因s3是拼接的,Java底层就会在堆内存中创建
          一个StringBuilder对象,自动调用方法拼接's2'和c
          拼接完以后,调用toString()方法,把数据转换成String类型
        此时s3指向的是堆内存中的地址,而s1是字符串常量池中的地址
        */
        String s4 = "a"+"b"+"c";
        System.out.println(s1==s4);//true
    }
}

字符串的比较
使用==做比较

基本类型:比较的是数据类型是否相同
引用类型:比较的是地址值是否相同
字符串是对象,它比较内容是否相同,通过**equals()**方法实现

public class StringDemo04 {
    public static void main(String[] args) {
        //构造方法得到对象
        char[] chs={'a','b','c'};
        String s1=new String(chs);
        String s2=new String(chs);

        //直接赋值得到对象
        String s3="abc";
        String s4="abc";

        //比较字符串地址是否相同
        System.out.println(s1==s2);//false
        System.out.println(s1==s3);//false
        System.out.println(s3==s4);//true
        System.out.println("~~~~~");

        //比较字符串内容是否相同
        System.out.println(s1.equals(s2));//true
        System.out.println(s1.equals(s3));//true
        System.out.println(s1.equals(s4));//true
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值