String(字符串)

1、String概述

  • java.lang.String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都为此类的对象。

1.1、String的注意点

  • 字符串的内容是不会发生改变的,它的对象在创建后不能被更改。

1.2、总结

  1. String是Java定义好的一个类。定义在java.lang包中,所以使用的时候不需要导包。
  2. Java程序中的所有字符串文字都被实为此类的对象。
  3. 字符串不可变,它们的值在创建后不能被更改。

2、String构造方法代码实现和内存分析

2.1、创建String对象的两种方式

  1. 直接赋值                
    String          name        =        " 字符串 ";
    package stringdemo;
    
    public class StringDemo1 {
        public static void main(String[] args) {
            String s1 = "abc";
            System.out.println(s1);
        }
    }
    D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=21864:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
    abc
    
    Process finished with exit code 0
    
  2. new

构造方法 说明
public         String() 创建空白字符串,不含任何内容
public         String(String original) 根据传入的字符串,创建字符串对象
public         String(char[ ]        chs) 根据字符数组,创建字符串对象
public         String(byte[  ]       chs) 根据字节数组,创建字符串对象
                                                                                                                                                                                                                                                            
package stringdemo;

public class StringDemo1 {
    public static void main(String[] args) {
        String s2 = new String();
        System.out.println("@" + s2 + "!");//@!

        String s3 = new String("abc");
        System.out.println(s3);//abc

//      应用场景:修改字符串的内容。abcd -->  Qbcd
        char[] chs = {'a', 'b', 'c', 'd'};
        String s4 = new String(chs);
        System.out.println(s4);//abcd

//      应用场景:以后在网络当中传输的数据其实都是字节信息
//      我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了。
        byte[] bytes = {97, 98, 99, 100};
        String s5 = new String(bytes);
        System.out.println(s5);//abcd
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2016:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
@!
abc
abcd
abcd

Process finished with exit code 0

2.2、String内存分析,内存模型

2.2.1、直接赋值内存分析

  • 注意:StringTable(串池)在JDK7版本开始从方法区挪到了堆内存
  • String(字符串)_第1张图片
  •  当使用双引号直接赋值时,系统会检查字符串在串池中是否存在。不存在:创建新的,存在:复用

2.2.2、手动new内存图解析

String(字符串)_第2张图片

3、字符串的比较

                                                                                        ==号比的到底是什么?
基本数据类型 引用数据类型
基本数据类型比较的是数据值 引用数据类型比较的是地址值
String(字符串)_第3张图片 String(字符串)_第4张图片

                                                                                            字符串的比较
  • boolean  equals方法(要比较的字符串)
  • 完全一样结果才是true,否则为false
  • boolean equalsIgnoreCase(要比较的字符串)
  • 忽略大小写的比较
 
package stringdemo;

import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str1 = sc.next();//是new出来的
        String str2 = "abc";

        System.out.println(str1 == str2);//false
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=4197:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
请输入一个字符串
abc
false

Process finished with exit code 0
  • 查看next();方法的源码发现键盘输入的字符串是new出来的。
  • String(字符串)_第5张图片

 4、练习-用户登录

  • 已知正确的用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示。
  • ​​​​​​​
    package stringdemo;
    
    import java.util.Scanner;
    
    public class StringDemo1 {
        public static void main(String[] args) {
            String rightUsername = "zhangsan";
            String rightPassword = "123456";
    
            Scanner sc = new Scanner(System.in);
            for (int i = 0; i < 3; i++) {
                System.out.println("请输入用户名");
                String username = sc.next();
                System.out.println("请输入密码");
                String password = sc.next();
    
                if (username.equals(rightUsername) && password.equals(rightPassword)) {
                    System.out.println("用户登录成功");
                    break;
                } else {
                    if (i == 2) {
                        System.out.println("账号" + username + "被锁定,请联系管理员客服:");
                    }
                    System.out.println("用户登录失败,用户名或密码有误,您还剩下" + (2 - i) + "次机会");
                }
            }
    
    
        }
    
    }
    D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=5568:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
    请输入用户名
    z
    请输入密码
    z
    用户登录失败,用户名或密码有误,您还剩下2次机会
    请输入用户名
    z
    请输入密码
    z
    用户登录失败,用户名或密码有误,您还剩下1次机会
    请输入用户名
    z
    请输入密码
    z
    账号z被锁定,请联系管理员客服:
    用户登录失败,用户名或密码有误,您还剩下0次机会
    z
    Process finished with exit code 0
    

   

​​​

你可能感兴趣的:(#,常用API,开发语言,java,String,字符串)