【从零开始学习JAVA | 第八篇】String类

目录

前言:

String类:

常见的认识误区:

创建String类:

 注意点:

总结:


【从零开始学习JAVA | 第八篇】String类_第1张图片

前言:

        String类是Java中最常见的一个类,本篇将对Stirng类的各种功能进行详细的介绍,各位小伙伴如果感兴趣可以点击进来观看。

String类:

Java中的String类是一个非常常用的类,它表示一串字符序列。Java的字符串是不可变的,也就是说一旦创建了一个字符串对象,它的值就不能被修改。这种不可变性使得Java字符串非常安全和效率高。

String类被定义在java.lang包下,属于是Java的核心类,因此在使用的时候不需要进行导包操作。

常见的认识误区:

1.字符串拼接不是我们理解的把后面的字符串连接到前面的字符串上!

package com.itheima.demo1;

public class test07 {
    public static void main(String[] args) {
        String s1="123";
        String s2="456";
        
        System.out.println(s1+s2);
    }


}

输出结果:
【从零开始学习JAVA | 第八篇】String类_第2张图片

需要明确的是我们并不是把s2连接到s1后面,而是产生了一个新的字符串,这个字符串存储着s1的字符串与s2字符串连接的结果。也就是说s1与s2进行连接操作时,会产生一个新的字符串s3来存储新的字符串。

【从零开始学习JAVA | 第八篇】String类_第3张图片

 2.我们的赋值操作不是对字符串进行更改!

package com.itheima.demo1;

public class test07 {
    public static void main(String[] args) {
        String s1="123";
       s1="456";

        System.out.println(s1);
    }


}

运行结果:【从零开始学习JAVA | 第八篇】String类_第4张图片

 我们不是对原来的字符串进行更改,而是重新找到一块空间存储字符,并把这个新空间赋值给s1。

【从零开始学习JAVA | 第八篇】String类_第5张图片

 简单的可以概括为不是覆盖而是新建!而在给name进行赋值的时候,也会一共存在两个字符串 “1 2 3”和“4  5  6”。

创建String类:

1.直接赋值:

String name ="123";

 2.利用new关键字进行赋值操作:

String str = new String("123");

        需要注意的是,无论使用哪种方式创建String对象,都会在内存中分配新的堆空间,创建新的对象。而使用直接赋值创建字符串对象时,Java虚拟机会对同一常量池中的字面值进行重用,因此当多个String对象包含相同的字面值时,它们会指向同一个对象实例,从而节省了内存。

例如我们分别利用直接赋值和new关键字创建多个相同的值:

String name1 =“123”;
String name2 =“123”;
String str1 = new String ("123");
String str2 = new String ("123");

内存图解:
【从零开始学习JAVA | 第八篇】String类_第6张图片

JAVA为字符串提供的常见方法:
1.字符串的比较:
字符串的比较(是否相等)需要建立在数据类型相同的情况下,即要么是基本数据类型,要么是引用数据类型。

因为不同的数据类型比较方式不同:
【从零开始学习JAVA | 第八篇】String类_第7张图片

 举例:

public class test07 {
    public static void main(String[] args) {
        String s1="123";
        String s2= new String("123");
        System.out.println(s1==s2);
    }


}

实例:
【从零开始学习JAVA | 第八篇】String类_第8张图片

 我们发现即使S1与S2字符串值一样,但是因为数据类型不同,也无法得到我们想要的答案。

因为不同数据类型的字符串无法进行比较,但是在实际应用中,我们又无法始终保证字符串的数据类型始终一致,这给我们带来了巨大的困难,因此JAVA为我们提供了两个函数:

  • boolean equals(  )完全一样才会是true,否则就是false。
  • boolean equalslgnoreCase(   ) 是忽略大小写的比较。

代码:


public class test07 {
    public static void main(String[] args) {
        String s1="123";
        String s2= new String("123");
        String s3="abc";
        String s4= new String("ABC");
        System.out.println(s1+"与"+s2+"的比较结果为:"+ s1.equals(s2));
        System.out.println(s3+"与"+s4+"的比较结果为:"+ s3.equalsIgnoreCase(s4));
    }


}

 运行结果:

【从零开始学习JAVA | 第八篇】String类_第9张图片

 注意点:

        我们录入的字母即使与我们直接赋值的字符串结果一致,那也不相等,无法利用==号进行判断。

import java.util.Scanner;

public class test08 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字");
        String s1=sc.next();
        
        String s2="abc";
        System.out.println(s1==s2);
    }
}

运行结果:
【从零开始学习JAVA | 第八篇】String类_第10张图片

 这个问题,我们要到java的源码中去寻找答案,我们点击查看next的源码:
这里的底层跳的很深,不断地在深挖函数,因此不建议大家一个人摸索阅读:

在我们连跳七八次之后,就可以看到我们想要的:
【从零开始学习JAVA | 第八篇】String类_第11张图片

 我们可以发现:原来录入键盘数据是用到了 new 关键字,也就是说这个是引用数据类型,那自然无法和我们直接赋值得到的“abc”进行正常比较了。

总结:

        以后如果想对字符串进行比较,那么就不可以直接使用“==”,而是要用JAVA提供给我们的函数。这样才可以得到我们需要的答案。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

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