java中String类详解(java.lang.String)

介绍:

1、String是finall类,不可以被继承,不可以被改变的字符串。

小提示:不可变的字符串对象,尽量少使用+=操作 ⭐ 

2、String表示字符串类型,属于 引用数据类型,不属于基本数据类型。

3、在java中随便使用 双引号括起来 的都是String对象。

      例如:“abc”,“你好”,“hello world!”,这是3个String对象。

4、在JDK当中双引号括起来的字符串,例如:“abc” "def"都是直接存储在“方法区”的“字符串常量池”当中的。

为什么SUN公司把字符串存储在一个“字符串常量池”当中呢?

因为字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。

例1:

 public static void main(String[] args) {
        String s1="hello";
        s1+="world";
        String s2=new String();
    }

java中String类详解(java.lang.String)_第1张图片

上图中,String s1+=之前指向地址为“0x666”,+=之后指向地址变成:"0x888'。也就是说,指向了两个不同对象,所以String类型尽量不要+=运算,因为每运算一次都会产生垃圾内存,并且垃圾回收器不会回收字符串常量池内的东西 。

另外:通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中

总结1:String字符串具有不可变性,当字符串重新赋值时,不会在原来的内存地址进行修改,而是重新分配新的内存地址进行赋值。

2.当字符串进行拼接时,也不会在原来的内存地址进行修改,而是重新分配新的内存地址进行赋值。

常用方法:

方法名 作用
1. length() 统计字符个数
2. equals equalsIgnoreCase方法

equals是Object的方法,用来判断两个对象是否相同,在判断字符串时它判断的是两个对象的内容是否相同。

equalsIgnoreCase是String的判断方法,只能判断两个字符串。

3. trim方法 去掉字符串收尾的空格
4. substring方法 返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。
5. concat()方法 将几个字符串连接到一起
6. contains() 用于判断字符串是否包含某个元素
7.int indexOf(String str) 返回指定字符str在字符串中(方法调用者)第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1
8. lastIndexOf() 返回str最后一次出现的位置
9. replace() 替换字符串
10. split() 将字符串以regex分割     !分隔符会把字符串拆成若干个子字符串,然后生成一个String数组
11. toLowerCase() toUpperCase()

toLowerCase()字符串转小写

toUpperCase()字符串转大写

实例:

public class Demo2 {
    public static void main(String[] args) {
        String s0="kshkjgksa";
        System.out.println(s0.length());//9  字符串长度

        String s1="a";
        String s2=new String("a");
        System.out.println(s1.equals(s2));//true  判断值知否相等

        System.out.println("HELLO".equalsIgnoreCase("hello"));//true 忽略大小写

        System.out.println("    hello   ".trim());//hello  去掉字符串收尾的空格

        System.out.println("hello world".substring(3));//lo world  截取字符串
        System.out.println("hello world".substring(3,7));//lo w 截取字符串

        String s = "厉害了,";
        String str1 = "我的";
        String str2 = "国!";
        s = s.concat(str1);//将字符串str1接到字符串s后面
        s = s.concat(str2);//将字符串str1接到字符串s后面
        System.out.println(s);//厉害了,我的国!

        //判断
        String s3 = "hello world 中国人";
        System.out.println(s3.contains("hello"));//true
        String str = "01234567890123456789";
        System.out.println(str.indexOf("123"));//1
        System.out.println(str.indexOf("123",5));//11 //从第五位开始查找
        System.out.println(s3.lastIndexOf("hello"));//0
        System.out.println(s3.startsWith("hello"));//true
        System.out.println(s3.endsWith("国人"));//true

        String s4 ="1a2";
        String[] split = s4.split("a");
        //split:{"1","2"}
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }


        //替换  hello java 中国人
        String s5 = "hello world 中国人";
        System.out.println(s5.replace("world","java"));//hello java 中国人
        System.out.println(s5.replace("world",""));//hello  中国人
        System.out.println("hellohellohello".replace("hello","ok"));//okokok
    }
}

你可能感兴趣的:(java学习笔记,java,jvm,开发语言)