Java初学者学习总结(三)——String

Java初学者学习总结(三)——String

一、概念

String类代表字符串,字符串是常量,他们的值在创建之后不能更改。
字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。

二、创建

1、直接赋值方式创建对象
String str = “hello”;
直接赋值方式创建对象是在方法区的常量池
2、通过构造方法创建字符串对象
String str=new String(“hello”);
通过构造方法创建字符串对象是在堆内存
对比效果如下:

        String str1 = "helloword";
        String str2 = "helloword";

        String str3 = new String("helloword");
        String str4 = new String("helloword");

        String str5 = str1;// 引用传递,str5指向str1的堆内存地址
        String str6 = str3;

        System.out.println("1和2是否是同一地址?");
        System.out.println(str1 == str2);//true
        System.out.println(str5 == str1);//true
        System.out.println(str5 == str2);//true
        System.out.println("1和3,3和4是否是同一地址?");
        System.out.println(str1 == str3);//false
        System.out.println(str3 == str4);//false
        System.out.println("6和3,6和4是否是同一地址?");
        System.out.println(str6 == str3);//true
        System.out.println(str6 == str4);//false

三、两种实例化方式总结

1)直接赋值(String str = “hello”):只开辟一块堆内存空间,并且会自动入池,不会产生垃圾。
2)构造方法(String str= new String(“hello”);):会开辟两块堆内存空间,其中一块堆内存会变成垃圾被系统回收,而且不能够自动入池,需要通过public String intern();方法进行手工入池。
手工入池效果如下:

        String str1 = new String("test hello word");
        String str2 = "test hello word";
        System.out.println(str1 == str2);//false

        String str3 = new String("new test hello word!").intern();
        String str4 = "new test hello word!";
        System.out.println(str3==str4);//true

四、常用方法

常用方法

1、String的判断功能:

boolean equals(Object obj):比较字符串的内容是否相同
boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写
boolean startsWith(String str): 判断字符串对象是否以指定的str开头
boolean endsWith(String str): 判断字符串对象是否以指定的str结尾

2、String的获取功能:

int length():获取字符串的长度,其实也就是字符个数
char charAt(int index):获取指定索引处的字符
int indexOf(String str):获取str在字符串对象中第一次出现的索引
String substring(int start):从start开始截取字符串
String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end

3、String的转换功能:

char[] toCharArray():把字符串转换为字符数组
String toLowerCase():把字符串转换为小写字符串
String toUpperCase():把字符串转换为大写字符串

4、String的其他常用方法:

String trim():去除字符串两端空格
String[] split(String str):按照指定符号分割字符串

五、String不可变的好处

1、可以实现多个变量引用堆内存中的同一个字符串实例,避免创建的开销。
2、我们的程序中大量使用了String字符串,有可能是出于安全性考虑。
3、大家都知道HashMap中key为String类型,如果可变将变的多么可怕。
4、当我们在传参的时候,使用不可变类不需要去考虑谁可能会修改其内部的值,如果使用可变类的话,可能需要每次记得重新拷贝出里面的值,性能会有一定的损失。

转载:Java常用类(二) String
原文出处:https://www.cnblogs.com/zhangyinhua/p/7689974.html#undefined

猜你喜欢

转载自blog.csdn.net/fire_to_me/article/details/80374196