栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String类及其常见用法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

String类及其常见用法

1、JDK中的String声明:

public final class String

被final修饰的类无法被继承,所以String没有子类。

2、创建字符串的四种方法

(1)直接赋值

String str1="hello world";

(2)通过构造方法

String str2=new String("hello world");

(3) 通过字符串数组产生

char []data=new char{'a','b','c'};
String str3= new String(data); 

(4)通过String的静态方法valueOf(任意数据类型),转为字符串

String str4=String.valueOf(10);

3、字符串比较相等

使用equals方法(所有引用数据类型比较相等都使用equals方法) 

public class Test {
    public static void main(String[] args) {
        //比较字符串是否相等
        String str1="hello";
        String str2="hello";
        String str3="Hello";
        System.out.println(str1.equals(str2));
        System.out.println(str1.equals(str3));
        //不区分大小写进行比较使用equalsIgnoreCase
        System.out.println(str1.equalsIgnoreCase(str3));
    }
}

在某些情况下,如用户输入时,使用equals方法需注意做判空处理

此时出现了空指针异常,将要比较的内容放在前面,就可以避免。

4、字符串常量池

当使用直接赋值法产生字符串对象时,JVM会维护一个字符串的常量池,若该对象在堆中还不存在,则产生一个新的字符串对象加入常量池中。

(1)当继续使用直接赋值法产生字符串对象时,若常量池中已有该对象,则此时不在新建字符串对象,而是复用已有对象。

String str1="hello";
String str2="hello";
String str3="hello";

 (2)当使用构造方法产生字符串对象时,若该对象在常量池中不存在,则先入常量池,再产生字符串对象。 

        String str1=new String("hello");
        String str2=new String("hello");
        String str3=new String("hello");

当使用了new关键字,就在堆中开辟了新的空间,此时三行代码产生了4个对象。当字符串常量hello第一次出现时,会先进入字符串常量池,然后产生str1对象,new产生str2、str3时,常量池中已经有了hello,只需产生两个对象即可。

(3)手工入池:String类提供的intern方法

public native String intern()

调用intern方法会将当前字符串引用指向的对象保存到字符串常量中。

① 若当前常量池中已经存在了该对象,则不再产生新的对象,返回常量池中的String对象 。

        String str1=new String("hello");
        str1.intern();     //并没有改变原来的str1
        String str2="hello";   //str1还是堆中的对象,str2是常量池中的hello
        System.out.println(str1==str2);
        str1=str1.intern();  //此时str1被改变了
        System.out.println(str1==str2); //str1和str2都是常量池中的hello

② 若当前常量池中不存在该对象,则该对象入池,返回入池后的地址。

        char[] data=new char[]{'a','b','c'};//此时产生的是一个字符数组
        String str1=new String(data);
        str1.intern();
        String str2="abc";
        System.out.println(str1==str2);

5、字符串的不可变性

字符串对象的内容不能被改变,字符串的引用可以改变。

String str=new String("good");

good第一次出现时先入池,new String之后str=good; 

字符串实质上是一个字符数组char[ ],字符串保存的值实际上在数组中保存。、

6、如何修改字符串的内容

1)在运行时通过反射破坏value数组的封装;

2)更换使用StringBuilder或者StringBuffer类(此时已经不是String类了);

(1)使用的append方法拼接字符串

        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append("hello");
        stringBuilder.append(" world");
        stringBuilder.append(" !");
        System.out.println(stringBuilder);

 (2) 关于StringBuilder类的具体使用

① StringBuilder转变为String,调用toString方法

        StringBuilder sb=new StringBuilder("hello");
        String str=sb.toString();
        System.out.println(str);

② String转变为StringBuilder,使用StringBuilder的构造方法 

        StringBuilder sb=new StringBuilder("hello");
        System.out.println(sb);
        sb.append(" world");
        System.out.println(sb);

  ③ 字符串的反转操作,reverse( )方法;

④ 字符串删除指定范围的数据

delete(int start, int end);删除了[start , end)的内容

⑤ 插入操作 

insert(int offest, 各自数据类型)

(3)String、StringBuilder、StringBuffer的区别

① String类的对象无法修改, StringBuilder、StringBuffer的对象可以修改。

② StringBuffer是线程安全的操作,但性能较差。

③ StringBuilder是线程不安全,性能较高。

7、字符串的其他常见操作

(1)字符串比较

equals方法区分大小写,比较属性值,返回值类型boolean
equalsIgnore方法不区分大小写,返回值类型boolean
compareTo方法比较unicode 的值,返回类型是int

注:关于compareTo方法——在String类中compareTo()方法是一个非常重要的方法,该方法返回一个整型,该数据会根据大小关系返回三类内容:相等(=0),前者大于后者(>0),前者小于后者(<0);字符串的比较大小规则, 总结成三个字 "字典序" 相当于判定两个字符串在一本词典的前面还是后面. 先比较第一 个字符的大小(根据 unicode 的值来判定), 如果不分胜负, 就依次比较后面的内容。 

(2)字符和字符串的相互转换

 ①  char ——> String

使用构造方法

        char[] ch=new char[]{'a','b','c'};
        String str=new String(ch);
        System.out.println(str);
        String str1=new String(ch,0,2);//将部分数组转变为字符串[0,2)
        System.out.println(str1);

 ② String——> char

③ String——>byte

 ④ byte[]——>String

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885436.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号