String(字符串)

news/2024/10/21 10:17:49/

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
    abcProcess 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 -->  Qbcdchar[] 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
abcdProcess finished with exit code 0

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

2.2.1、直接赋值内存分析

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

2.2.2、手动new内存图解析

3、字符串的比较

                                                                                        ==号比的到底是什么?
基本数据类型引用数据类型
基本数据类型比较的是数据值引用数据类型比较的是地址值

                                                                                            字符串的比较
  • 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
falseProcess finished with exit code 0
  • 查看next();方法的源码发现键盘输入的字符串是new出来的。

 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
    

   

​​​


http://www.ppmy.cn/news/1026218.html

相关文章

C# Winform 自动获取 软件版本号

C# Winform如何自动获取版本号 方案一 缺点是不适配&#xff0c;clickones发布的版本 public static string GetVersion() {try {return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();}catch{return System.Ref…

【C语言】分支语句(选择结构)详解

✨个人主页&#xff1a; Anmia.&#x1f389;所属专栏&#xff1a; C Language &#x1f383;操作环境&#xff1a; Visual Studio 2019 版本 目录 什么是分支语句&#xff1f; if语句 if if - else单分支 if - else if - else ...多分支 if - if嵌套 switch语句 基本语…

NFT Insider#102:The Sandbox重新上线LAND桥接服务,YGG加入Base生态

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…

HCIP的BGP基础实验

一、实验需求 除R5的5.5.5.0环回外&#xff0c;其他所有的环回均可互相一访问。 二、实验步骤 1.配置ip 2.建立邻居关系 2.1 R1和R2建立直连的EBGP邻居关系 [r1]bgp 1 [r1-bgp]router-id 1.1.1.1 [r1-bgp]peer 12.1.1.2 as-number 2 要建的话双方都要建下面配置R2 [r2]bgp…

Docker mysql+nacos单机部署

docker 网络创建 由于nacos需要访问mysql的数据&#xff0c;因此mysql容器和nacos容器之间需要进行通信。容器间通信有很多方式&#xff0c;在这里采用同一网络下的方式进行实现。因此需要创建网络。创建网络的命令如下&#xff1a; docker network create --driver bridge n…

《甲午》观后感——GPT-3.5所写

《甲午》是一部令人深思的纪录片&#xff0c;通过生动的画面和真实的故事&#xff0c;向观众展示了中国历史上的一段重要时期。观看这部纪录片&#xff0c;我深受触动&#xff0c;对历史的认识也得到了深化。 首先&#xff0c;这部纪录片通过精心搜集的历史资料和珍贵的影像资料…

Redis——特性介绍与应用场景

Redis特性介绍 In-memory data structrues 众所周知&#xff0c;MySQL是一种关系型数据库&#xff0c;其通过表的结构存储数据&#xff0c;就类似于建立了一个excel表格来存储数据。但是像视频这类数据并不适合存储在关系型数据库中&#xff0c;因此存在非关系型数据库——通…

日常BUG—— maven编译报错

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 一个maven项目在由于在代码中书写了如下代码&#xff1a; public static ConcurrentMap<…