Java中的String用法

本文深入探讨Java中String类型的特性,包括其不可变性、创建方式、字符串池、比较方法及与其他类型转换等内容,帮助读者全面理解并正确使用String。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新手Java程序员了解String类型

1、String是什么数据类型?

  String在定义上是java.lang包下的一个类,它不是基本的数据类型

  String是不可变的,JVM使用字符串池来存储所有的字符串对象

2、创建String对象的方式

    使用关键new

   这种方式JVM创建字符串对象但不存储于字符串池。可以调用intern()方法存储字符串池,如果字符串中已经有同样的字符串,则返回引用。

      使用双引号直接创建

这种方式JVM去字符串池中找有没有值相等的,如果有返回找到的字符串引用。如果没有创建新的字符串。

3、判断一个字符串是否是回文(顺读和倒读都一样)

     回文就是正反都一样的词,如果需要判断是否是回文,只需要比较正反是否相同即可。String类并没有提供反转方法供我们使用,但是StringBuffer和StringBuilder有reverse方法。

private static boolean isPalindrome(String str){
        if(str==null)
            return false;
      
 StringBuilder strBuilder=new StringBuilder(str);
        strBuilder.reverse();

        return strBuilder.toString().equals(str);
    }

不使用任何其他类来实现:

private static boolean string(String str){
        if(str==null)
            return false;
      
 int len=str.length();
        System.out.println(len/2);
        for(int i=0;i<len/2; i++){
            if(str.charAt(i)!=str.charAt(len-i-1)){
                return false;
            }
        }
        return true;
    }

4、如何让一个字符串变成大写或小写形式

     toUpperCase()大写

     toLowerCase()小写

5、字符串的比较

String内部实现了Comparable接口,有两个方法比较compare To(String anotherString)和compare TolgnoreCase(String str)。

   compare To(String anotherString)

与传入的anotherString进行比较,如果小于传入的字符串返回负数,如果大于则返回正数,当两个数相等时返回0,此时eqauls方法会返回true

    equalslgnoreCase(String str)

   该方法与compareTo方法类似,区别只是内部利用了Character.toUpperCase等方法进行了大小写转换后进行比较

6、String和char类型相互转换

这是一个误导题,String是一系列的字符,所以我们没办法转成单一的char,但可以调用toCharArray()方法将字符串转换成字符数组。

7、String 转换为byte array

使用String的getBytes()方法将String转成byte使用String的构造方法new String(byte[] array)将byte数据转为String

8、String,StringBuffer,StringBuilder区别

String是不可变类,对String类型的操作总会创建新的字符串。操作String很耗费资源,所以Java提供了两个工具来操作String  StringBuffer和StringBuilder

StringBuffer和StringBuilder是可变类,StringBuffer是线程安全,StringBuilder则是线程不安全。所以多线程对同一个字符串操作时选择StringBuffer.由于不需要处理多线程的情况,StringBuilder的效率比StringBufferh高

9、String是不可变有什么好处?

String不可变优点:

       由于String是不可变类,所以在多线程中使用时安全的,我们不需要做任何的替他同步操作

       String不可变,它的值也不能被改变,座椅用来存储数据密码安全

      String不可变可以在java运行时节省大量java堆空间,因为不同的字符串变量可以引用池中的相同的字符串,如果字符串是可变的,任何变量的值改变就会反射到其他变量,那么字符串池就没有任何意义

10、如何分割字符字符串

   split(String regex);传入正则字符串,返回字符串数组

   split(String regex,int limit);限制分割结果数组中有几个字符串。

11、判断两个String是否相等

有两种凡是判断字符串是否相等,使用“==”或者使用equals方法。当使用“==”操作符时,不仅比较字符串的值,还会比较引用的内存地址,大多数情况下我们只需要判断值是否相等,此时用equals方法比较即可。

12、字符串池

    存储字符串,存在于Java堆内存

13、String的intern()方法

当调用intern()方法被调用,如果字符串池中含有一个字符串和当前调用方法的字符串equals相等,那么就会返回池中的字符串,如果池中没有的话则首先先将当前字符串假如池中,然后返回引用

14、String是线程安全吗

String是不可变类,一旦创建String对象,我们就无法改变它的值,因此,它是线程安全的,可以安全地用于多线程环境中

15、为什么我们在使用HashMap的时候总是用String做key

因为字符串是不可变,当创建字符串时它的hashcose被缓存下来,不需要再次计算。因此HashMap内部实现是通过key的Hashcode来确定value的存储位置,所以相比其他对象更快,这也是我们平时都是用String作为HashMap对象。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值