Java基础面试之String

1、String是基本数据类型吗

String不属于基本数据类型,如果非要说的话我认为String应该和包装类归为一类,是对字符串进行操作的工具类,java的基本数据类型只有以下八种:

类型字节数位数范围
char216char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符
byte18-2^8 ~ 2^8 -1
short216-2^16 ~ 2^16 - 1
int432-2^32 ~ 2^32 -1
lang864-2^64 ~ 2^64 -1
float432
double864
boolean18true/false

2、java 中操作字符串都有哪些类?它们之间有什么区别?

java中操作字符串常见的类与三种:String、StringBuilder、StringBuffer

String

string操作字符串是不可变的,每次定义一个新的string的变量都是不可变的。
如果改变String变量的值实际上不是改变他的值,而是改变了String变量在内存中指向的地址,使其指向新的地址。String操作字符串不是线程安全的

StringBuilder

StringBuilder对象操作字符串是可变的,可以通过append方法继续往字符串后面添加新的字符串。
每次改变的都是变量的值,而不是改变变量在内存中的指向。StringBulider也不是线程安全的字符串操作

StringBuffer

StringBuffer操作字符串也是可变的,与StringBuilder操作字符串本质上没什么区别。
StringBuffer和StringBuilder最大的区别就在于StringBuffer是线程安全的,因为StringBuffer中的方法都被synchronized修饰了

3、String str="hello, world"与 String str=new String(“hello, world”)一样吗?

答案是不一样的

    public static void main(String[] args) {

        // 定义一个字符串,在字符串常量池中放入一个字符串hello, world
        String str = "hello, world";
        // 定义一个字符串,在堆内存中new出一个实例对象
        String str1 = new String("hello, world");
        // 返回false代表两个变量在内存中指向的地址不是同一个地址,返回true代表两个变量在内存中指向的地址是同一个地址
        System.out.println(str == str1);    // 返回结果是false
        // 因为String中重写了equals方法,此时的equals已经不是仅仅比较的两个字符串的地址是否相同了,而是内容是否一样
        System.out.println(str.equals(str1));   // 返回结果为true

        /**
         * 原因分析:
         *    String str = "hello, world";这段代码是在字符串常量池存储的一个"hello, world"的字符串
         *    String str1 = new String("hello, world"); 这段代码是在堆内存中创建了一个实例对象
         *    因此两者所指向的内存中的地址不是同一个地址,两个对象并不是同一个对象
         */
    }

4、如何将字符串反转?

代码示例

     // 字符串反转
    public static void main(String[] args) {
        // 1、StingBuffer/StringBuilder中的reverse()
        String str = "String reverse";
        System.out.println(StringTest.reverseTest(str));
        // 2、新建char数组反转
        System.out.println(StringTest.charArrTest(str));
        // 3、遍历反转字符串
        System.out.println(StringTest.foreachStringTest(str));
    }

    // 1、StingBuffer/StringBuilder中的reverse()
    public static String reverseTest(String sourceStr) {
        StringBuffer sbf = new StringBuffer(sourceStr);
        StringBuilder sb = new StringBuilder(sourceStr);
        sbf.reverse().toString();
        return sb.reverse().toString();
    }

    // 2、新建char数组反转
    public static String charArrTest(String sourecStr) {
        char[] arr = sourecStr.toCharArray();
        char[] reArr = new char[sourecStr.length()];
        for (int i = 0; i < arr.length; i++) {
            reArr[i] = arr[arr.length - 1 - i];
        }
        return new String(reArr);
    }

    // 3、遍历字符串反转
    public static String foreachStringTest(String str) {
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < str.length(); i++) {
            sb.append(str.charAt(str.length() - 1 - i));
        }
        return sb.toString();
    }

5、String 类的常用方法都有那些?

length():获取字符串的长度
isEmpty():判断字符串长度是否为 0
charAt():返回指定索引处的字符
equals():判断两个变量内容是否相同
equalsIgnoreCase():忽略大小写比较两个字符串是否相同
startsWith():判断字符串是否以指定字符串开头
endsWith():判断字符串是否以指定字符串结尾
hashCode():获取字符串的hash码
indexOf():返回子字符串第一次在字符串中出现的索引
lastIndexOf():返回子字符串最后一次在字符串中出现的索引
substring():截取字符串
concat():将指定字符串拼接到字符串末尾
replace():替换字符串中的字符
contains():判断指定字符是否存在字符串中
split():根据指定字符将字符串拆分成数组
toLowerCase():将字符串转换成小写返回
toUpperCase():将字符串转换成大写返回
trim():去除字符串开始和结尾的空格
strip():删除字符串中索引的空格
toCharArray():将字符串转换成字符数组
format():返回值指定格式的字符串
valueOf():将对象转换成String输出,类似于包装类的装箱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值