java基础--字符串用法

devtools/2024/9/23 6:47:33/

一、前言(在java中字符串的重要性)

在 Java 编程中,字符串(String)的重要性不言而喻,它几乎贯穿于所有的应用程序和系统中。以下是 Java 中字符串重要性的几个方面:

1. 数据表示和处理

  • 文本数据:字符串是表示文本数据的主要方式。无论是用户输入、文件读取还是网络传输,文本数据通常都以字符串的形式存在。
  • 数据格式化:字符串用于格式化输出,如日志记录、用户界面显示等。

2. 用户交互

  • 输入输出:用户通过字符串与程序进行交互,输入数据和接收反馈。例如,命令行参数、表单输入、控制台输出等。
  • 错误信息:错误和异常信息通常以字符串形式呈现,帮助开发者调试和用户理解问题。

3. 数据存储和传输

  • 文件操作:读写文件时,文本内容通常以字符串形式处理。
  • 网络通信:在网络传输中,数据包和消息通常以字符串形式编码和解码。

4. 业务逻辑处理

  • 数据验证:字符串用于验证用户输入的格式和内容是否符合要求。
  • 数据转换:字符串与其他数据类型(如数字、日期)之间的转换是常见的业务需求。

二、String类的基础

1.创建String类的俩种方式:


 (1)直接创建,比较常用

 

java">package 字符串;public class str1 {public static void main(String[] args) {
String s1="hello";
Systrm.out.println(s1);}
}

 这个是直接定义,在串池中开辟一块空间来存放s1,然后将“hello”存放到s1中。

(2)通过new方法构造 

java">package 字符串;public class str1 {public static void main(String[] args) {String s1=new String();System.out.println("s"+s1+"2");}
}

 这个是new一个对象,获得的是一个空的字符串。

 

1、当然,这个new对象中也可以存放数组类型,并且打印出来。例如

java">package 字符串;public class str1 {public static void main(String[] args) {
char [] arr={'a','b','c'};
String s1=new String(arr);
System.out.println(s1);}}

以上打印的结果是abc。 

2、也可以是一个字节数组,根据字节数组的内容在创建一个新的数组。

java">package 字符串;public class str1 {public static void main(String[] args) {byte [] arr={97,98,99};String s1=new String(arr);System.out.println(s1);}}

 代码的结果也是abc。这个是先去把97,98,99拿去更ASCII码表对应找到abc。

三、字符串在内存中到底是怎么创建的?

(1)直接创建的

 

 

栈:是跟方法有关的,方法运行时进栈,运行完成出栈。 

堆:new出来的对象全在堆里面。

方法区:程序在运行时,会先编码成class字节码文件,把这个字节码文件加载到方法区中,临时存储。

字符串池(串池):直接赋值的字符串,才存在这个串池中,如果是通过,new关键字创建的字符串就不在里面。

 

我们通过上面的一个例子:如果我们同时对s1和s2赋值“abc” ,当代码执行完s1时,会继续执行s2,但是在直接会在串池中搜索有没有abc,如果存在,那就0x0011传给s2。

1.总结:

在使用双引号直接赋值的时候,如果字符串在串池中存在,那就复用,如果不存在就重新创建一个。

(2) new关键字创建的

每一次new都会在堆中创建一个空间 ,但是s1和s2记录的地址值是不一样的。

2.总结:

以后建议使用第一种,比较节省内存,且容易创建。

四、java中字符串的使用(字符串的比较)

1.你真的知道“==”的用法吗?
 

 在java中==的用法是要分情况的:

1.如果是第一种:基本数据类型,那我们只要比较数值即可。

2.如果是第二种:引用数据类型,比较的是地址值。

2.那我不能比较内容吗?

显然当然是可以的

 

 

 一、equals的用法:比较全部的字符串,如果一样返回true不是返回false,可以做用户名和密码一致性校验。
java">package 字符串;public class str1 {public static void main(String[] args) {
String s1=new String("abc");
String s2="abc";
blooean result=s1.equals(s2);
System.out.println(result);
//true}}

 

 二、equalsIgnoreCase的用法,可以忽略大小写的问题,可以用来做验证码登录。

java">package 字符串;public class str1 {public static void main(String[] args) {
String s1=new String("Abc");
String s2="abc";
blooean result=s1.equalsIgnoreCase(s2);
System.out.println(result);
//true}}

问题1:如果键盘输入一个字符串abc和自己定义一个abc,判断是不是true还是false。

java">package 字符串;import java.util.Scanner;public class str1 {public static void main(String[] args) {//键盘输入一个字符串“abc”、Scanner sc=new Scanner(System.in);System.out.println("亲输入一个字符串:");String  res=sc.next();//代码定义一个字符串“abc”String  s1="abc";//==判断是不是true还是falseSystem.out.println(s1==res);}}

 

显然,这个结果是false。那为什么会是false呢?

五、初步阅读输入函数中 String res=sc.next()源码来解决问题:

按住ctrl+鼠标点击next();

 

在点这个,进去看看。 

找到s,在进入group看一下 

这里又吊用了group(0) ,在点进去看一下--------------

在进入到getSubSequence里面 

 

 

点击String类,到这一步。 

 进入到substring里面

 

 在点击new.String里面你就会看到

总结:通过千辛万苦我们得知,这个键盘输入的值是通过new方式创建的所以你应该可以理解为什么上面的比较是false了吧!

六、总结

今天主要介绍string的创建的两种方式,了解一下java中内存模型,明天我在继续解释java字符串操作中,翻转和切片索引以及StringBuild和Stringjion的用法。

通过本文的探讨,我们深入了解了Java字符串的重要性及其在编程中的广泛应用。希望这些知识能帮助您在未来的开发工作中更加得心应手。如果您觉得本文对您有帮助,不妨尝试将这些技巧应用到您的下一个项目中,并分享您的成果。您的实践经验将是对我们最大的鼓励。感谢您抽出宝贵的时间阅读本文。如果您有任何问题或建议,欢迎随时联系我们。期待与您在技术的道路上共同进步。敬请关注我们下一期的博客,我们将探讨更多关于Java性能优化的实用技巧和案例分析。

http://www.ppmy.cn/devtools/89014.html

相关文章

[Bugku] web-CTF靶场系列详解①!!!

平台为“山东安信安全技术有限公司”自研CTF/AWD一体化平台,部分赛题采用动态FLAG形式,避免直接抄袭答案。 平台有题库、赛事预告、工具库、Writeup库等模块。 ------------------------------- Simple_SSTI_1 启动环境: 页面提示传入参数f…

数字电路设计常见术语

头阻(Head-of-Line blocking) 交织(interleaving) 加速比(speedUP) 乱序(outOfOrder) 保序(order) 乱序重排(reorder) 发出未回…

8月17日|广州|Cocos开发者沙龙不见不散!

6月底举行的Cocos成都沙龙吸引了近200位开发者和10多家发行,得到了大家的一致好评。 Cocos广州沙龙即将到来,会邀请更多KOL和头部发行、渠道嘉宾分享行业经验,让大家实现技术干货、游戏合作、行业信息多丰收。 活动主题:小游戏与出…

关于JS中的AO对象

在JavaScript中,AO对象(Activation Object,激活对象)是与函数执行上下文相关的概念。每当一个函数被调用时,都会创建一个新的执行上下文,这个执行上下文包含一个AO对象,用于存储在函数执行期间创…

社交登录新纪元:Laravel Socialite 实战指南

社交登录新纪元:Laravel Socialite 实战指南 在当今数字化世界,社交登录为用户提供了一种快速、简便的登录方式。Laravel Socialite 是 Laravel 社区的一个扩展包,它提供了一种统一的方法来处理社交账号登录。本文将详细介绍如何在 Laravel …

欧拉图,欧拉通路,欧拉回路,Hierholzer算法详解

文章目录 零、哥尼斯堡七桥问题一、欧拉图1.1 相关概念1.2 判别法(不做证明)1.3 Hierholzer算法1.4 代码实现1.4.1 邻接表存图1.4.2 链式前向星存图 二、OJ练习2.1 模板12.2 模板22.3 重新安排行程2.4 合法重新排列数对2.5 破解保险箱2.6 骑马修栅栏2.7 …

【组合数学】【Python】【小练习】一、斯特灵近似式求阶乘

一、问题介绍 斯特灵(Stirling)近似式,是数学分析中,用于求阶乘近似值的一个常用公式,其简单的表述形式为: 二、Python实现 使用Python,循环从n1至n98,分别输出n的阶乘值、斯特灵公…

蓝屏事件:网络安全的启示

“微软蓝屏”事件暴露了网络安全哪些问题? 近日,一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅成为科技领域的热点新闻,更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件,源于美国电脑安全技…