Java中String类的常考面试题汇总

Java中String类的常考面试题汇总


前言

由于在学习中需要不断完善自身,在网络上搜寻了几道关于java中String类的面试题,汇总为一篇博客,以便在将来有需要时,能够找到复习的地方


主题


第一题

		String s1 = "abc";
        String s2 = "abc";

        System.out.println(s1 == s2);   // true
        System.out.println(s1.equals(s2));// true

    答案: true true

    == 号既可以比较基本数据类型(比较值),也可以比较引用数据类型(比较地址值)


    第一个语句的结果为true,是因为常量池的原因,如果该字符串通过直接双引号创建常量的方式创建的话,在常量池中没有,就创建一个,如果常量池中有的话,就直接引用
    equals()方法在官方文档中说明,将此字符串与指定对象比较,当且仅当参数不为null,并且是与此对象表示相同字符序列String对象时,才返回true
    由此可以判断第一个为true,第二个为true

第二题

		String s1 = new String("abc");
        System.out.println(s1);
        /*
        * 问创建了几个对象?
        *   创建了2个对象,常量池中有一个"abc",堆区中也有一个常量池中的副本(是构造函数中参数的副本)
        *   public String(String original);
        * */

    答案:两个

    为什么是两个?
    查看官方文档,初始化一个新创建的String对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本

第三题

		String s1 = new String("abc");
        String s2 = "abc";

        System.out.println(s1 == s1); //      false
        System.out.println(s1.equals(s2));//   true

    答案: false true

    s1的地址值是在堆内存中的,而s2的地址值是在常量池中的,所以为false


第四题

		String s1 = "a" + "b" + "c";
        String s2 = "abc";

        System.out.println(s1 == s2);   //  true
        System.out.println(s1.equals(s2));  //true

    答案: true true


    这里涉及了常量优化机制"a" + “b” + “c"会直接变为"abc”,都是指向常量池的"abc"


第五题

		String s1 = "ab";
        String s2 = "abc";
        String s3 = s1 + "c";

        System.out.println(s3 == s2);       //false
        System.out.println(s3.equals(s2));  //true

     答案: false true

在这里插入图片描述

在这里插入图片描述

String类的常用方法

//构造方法
public String()                //空构造

public String(byte[] bytes)    //把字节数组转化为字符串

public String(byte[] bytes,int index,int length) // 把字节数组的一部分转化为字符串

public String(char[] chars)    //把字符数组转化为字符串

public String(char[] chars,int index,int length) // 把字符数组的的一部分转化为字符串

public String(String original) //把字符串常量转化为字符串

//常用的获取功能

int length()    //获取字符串的长度

char charAt(int index) //获取指定索引位置的字符

int indexOf(char c)  //返回此字符在此字符串第一次出现的位置,如果没有则返回-1

int indexOf(String str)  //返回参数字符串在此字符串第一次出现的位置,如果没有则返回-1

int indexOf(char c,int fromIndex)  //返回此字符在此字符串从指定位置后第一次出现的索引

int indexOf(String s,int fromIndex) //返回此字符串在此字符串在指定位置后第一次出现的索引

int lastIndexOf()  //类似于indexOf,只不过是从后往前

String substring(int start)  //从指定位置开始截取字符串,默认到末尾

String substring(int start,int end)  //从指定位置开始截取字符串,到end部分   包括前,不包括尾部


//常用的判断方法

boolean equals(Object obj)  //比较字符串的内容是否相等,只有字符序列相同的情况下才会返回true,区分大小写

boolean equalsIgnoreCase(String str) //比较字符串的字符序列是否相等,忽略大小写

boolean startsWith(String str)  //判断字符串是否以参数为首部,是返回true

boolean endsWith(String str)  //判断字符串是否以参数为结尾

boolean contains(String str)  //判断字符串是否包含参数字符串

boolean isEmpty()  //判断字符串是否为空


//常用的转换功能

byte[] getBytes() //把字符串转化为字符数组,根据设定的码表

char[] toCharArray()  //把字符串转化为字符数组

static String valueOf(char[] arr)  //把字符数组转化为字符串

static String valueOf(int i) //把int类型的数据转化为字符串

String.valueOf() //该方法可以将任意数据类型转化为字符串

String toLowerCase() //把字符串转成小写

String toUpperCase() //把字符串转化为大写

String concat(String str) //把字符串拼接


//替换功能
String replace(char old,char new)  //新字符代替老字符

String replace(String old,String new)  //新字符串代替老字符串

String trim() //去掉字符串两边的空格

int compareTo(String str)  //按照Unicode码表比较大小

int compareToIgnoreCase(String str) //忽略大小写的比较

后续发现新题目将会再次补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值