String类

简介: 想必大家在学习c语言的时候已经涉及到了字符串了,但是在c语言中字符串只能使用字符数组或者字符指针,可以用库函数完成大部分操作。但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。接下来我带讲一下java中的String类,希望对大家有所帮助。

目录


一.认识 String 类


二.常用方法


1.字符串构造(定义)


2.字符串指为空和null


3.String对象的比较


(1)equals和==的区别


(2)compareTo比较


4.字符串查找


5.字符串转化


(1)数值和字符串转化


(2)大小写转换


(3)字符串数组互转


6.字符串的不可变性


7.字符串的其他操作


三.StringBuilder和StringBuffer


一.认识 String 类

想必大家在学习c语言的时候已经涉及到了字符串了,但是在c语言中字符串只能使用字符数组或者字符指针,可以用库函数完成大部分操作。但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了String类。接下来我带讲一下java中的String类,希望对大家有所帮助。


二.常用方法

1.字符串构造(定义)

String类提供的构造方式非常多,常用的就以下三种:

public static void main(String[] args) {
        // 使用常量串构造
        String s1 = "hello bit";
        System.out.println(s1);
        // 直接newString对象
        String s2 = new String("hello bit");
        System.out.println(s1);
        // 使用字符数组进行构造
        char[] array = {'h','e','l','l','o','b','i','t'};
        String s3 = new String(array);
        System.out.println(s1);
    }

注意:区别与c语言,java中的字符串没有以 \0 结尾的说法。


2.字符串指为空和null

大家注意下面代码,我会通过代码解释

    public static void main(String[] args) {
        //字符串为空
        String str1 = "";
        System.out.println(str1.isEmpty());//判断字符串是不是空的
        //字符串指向null,str2这个引用 不指向任何的对象,下面判断为空的时候会报错
        String str2 = null;
        System.out.println(str2.isEmpty());
    }

所以我们可以知道字符串为空和字符串=null不是一个概念。


3.String对象的比较

(1)equals和==的区别

如果是new一个字符串的话 比较字符串里面的值是否相同用 引用1.equals(引用2),判断两个字符串地址是否相同用 引用1 == 引用2。

    public static void main(String[] args) {
        String str1 = new String("abcd");
        String str2 = new String("abcde");
        System.out.println(str1 == str2);//flase
        System.out.println(str1.equals(str2));//true
    }

b6fca4a9ab7cc4d005a1773f0cd2fdf4_3d0dc263c661418ca41b7fe7b7405717.png

如果是直接赋值的话用==也能判断字符串的值是否相同(这里会涉及到哈希值,由于小编现在能力有限,等以后会再讲解)

public static void main(String[] args) {
        String str3 = "abcd";
        String str4 = "abcde";
        System.out.println(str3 == str4);//ture 字符串常量池 有哈希表的基础
    }

2607fc0d8d468510446e25b34cc75312_2b06996885c74ea2b24f00884133c10f.png

(这里注意:如果str1和str2里面的内容相同的话,如都是abc,在常量池中只会存一个abc)


(2)compareTo比较

 

    public static void main3(String[] args) {
        String str1 = "abcd";
        String str2 = "abcdef";
        //str1大于str2 那么 返回正数  如果不大于 返回负数  如果相同 返回0
        System.out.println(str1.compareTo(str2));//-2
        /**
         * 比较逻辑:
         * 1. 如果两个字符串的长度是一样的,那么第一个不一样的字符的大小就是整个字符串的大小
         * 2. 如果两个字符串长度不一样,那么先比较两个长度的差值个
         * 3、在这个差值范围内,有不一样的字符就能比较出来大小
         * 4、但是如果都是一样的,那么就看谁长 谁大 !
         */
    }

忽略大小写比较:

public static void main4(String[] args) {
        String str1 = "Abcd";
        String str2 = "abcd";
        //忽略大小写进行 比较
        System.out.println(str1.compareToIgnoreCase(str2));//0
    }

4.字符串查找

 

    public static void main(String[] args) {
        String str1 = "abcdef";
        //获取指定位置的字符
        char ch = str1.charAt(2);//c
        System.out.println(ch);
        //从3的位置找c开始出现的位置,没有返回-1
        int index = str1.indexOf('c',3);
        System.out.println(index);//-1
        String str2 = "ababcdabcdef";
        //从5开始 从后往前找a出现的位置
        int index2 = str2.lastIndexOf('a',5);
        System.out.println(index2);//2
    }

dfd19aed77cb5e446556d08c8e617be4_8af80cb9887341aaa27529df980e465e.png


5.字符串转化

(1)数值和字符串转化

public static void main(String[] args) {
    // 数字转字符串
    String s1 = String.valueOf(1234);
    String s2 = String.valueOf(12.34);
    String s3 = String.valueOf(true);
    String s4 = String.valueOf(new Student("Hanmeimei", 18));
    // 字符串转数字
    // 注意:Integer、Double等是Java中的包装类型,这个后面会讲到
    int data1 = Integer.parseInt("1234");
    double data2 = Double.parseDouble("12.34");
}

(2)大小写转换

 

public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO";
        // 小写转大写
        System.out.println(s1.toUpperCase());
        // 大写转小写
        System.out.println(s2.toLowerCase());
    }

(3)字符串数组互转

public static void main(String[] args) {
        String s = "hello";
        // 字符串转数组
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.print(ch[i]);
        } 
        // 数组转字符串
        String s2 = new String(ch);
        System.out.println(s2);
    }

6.字符串的不可变性

String是一种不可变对象. 字符串中的内容是不可改变,字符串不可被修改。


所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象,如:


1.字符串的指定字符的转化,转化的时候是新new一个对象进行转化


2.字符串的相加,也是new一个对象进行相加,不是在原来的对象中进行相加


7.字符串的其他操作

146473df86e094b03acd22bf3cd56850_a4083ecbe0404f90a1ae28e22b0ee0a4.png92a6f6824a91071704521915bee3a950_8ade15c967fd488b932251ab6266b266.png

三.StringBuilder和StringBuffer

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法,其它需要用到了大家可参阅Java Platform SE 8


目录
相关文章
|
1月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
34 0
java基础(13)String类
|
2月前
|
API 索引
String类下常用API
String类下常用API
39 1
|
6天前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
17 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
2天前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
10 2
|
5天前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
10 1
|
8天前
|
数据可视化 Java
让星星月亮告诉你,通过反射创建类的实例对象,并通过Unsafe theUnsafe来修改实例对象的私有的String类型的成员属性的值
本文介绍了如何使用 Unsafe 类通过反射机制修改对象的私有属性值。主要包括: 1. 获取 Unsafe 的 theUnsafe 属性:通过反射获取 Unsafe类的私有静态属性theUnsafe,并放开其访问权限,以便后续操作 2. 利用反射创建 User 类的实例对象:通过反射创建User类的实例对象,并定义预期值 3. 利用反射获取实例对象的name属性并修改:通过反射获取 User类实例对象的私有属性name,使用 Unsafe`的compareAndSwapObject方法直接在内存地址上修改属性值 核心代码展示了详细的步骤和逻辑,确保了对私有属性的修改不受 JVM 访问权限的限制
26 4
|
29天前
|
安全 Java
String类-知识回顾①
这篇文章回顾了Java中String类的相关知识点,包括`==`操作符和`equals()`方法的区别、String类对象的不可变性及其好处、String常量池的概念,以及String对象的加法操作。文章通过代码示例详细解释了这些概念,并探讨了使用String常量池时的一些行为。
String类-知识回顾①
|
13天前
|
存储 安全 Java
【一步一步了解Java系列】:认识String类
【一步一步了解Java系列】:认识String类
21 2
|
19天前
|
安全 C语言 C++
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
31 4
|
19天前
|
存储 编译器 程序员
【C++篇】手撕 C++ string 类:从零实现到深入剖析的模拟之路
【C++篇】手撕 C++ string 类:从零实现到深入剖析的模拟之路
50 2