当前位置: 首页 > news >正文

java基础--字符串用法

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

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

1. 数据表示和处理

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

2. 用户交互

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

3. 数据存储和传输

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

4. 业务逻辑处理

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

二、String类的基础

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


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

 

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

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

(2)通过new方法构造 

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

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

 

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

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、也可以是一个字节数组,根据字节数组的内容在创建一个新的数组。

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,可以做用户名和密码一致性校验。
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的用法,可以忽略大小写的问题,可以用来做验证码登录。

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。

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性能优化的实用技巧和案例分析。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • zotero安装与使用
  • Spring统一功能处理:拦截器、响应与异常的统一管理
  • MM 特殊采购类型
  • 加密简史:从古代到现代的方法
  • Linux网络编程之dpdk的环境配置详解
  • 自动化测试与手动测试的区别!
  • 时光不等人:java每日一练
  • python入门基础篇(一)
  • string.format()拼接参数
  • SpringBoot3里的文件上传
  • 将本地的业务写成成可供RPC远程调用的方法
  • 电脑添加虚拟网卡与ensp互联,互访
  • redis面试(五)删除策略和淘汰策略
  • Excel列名转换
  • 54、PHP 实现希尔排序
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 「面试题」如何实现一个圣杯布局?
  • 【node学习】协程
  • 07.Android之多媒体问题
  • 2019年如何成为全栈工程师?
  • Android Volley源码解析
  • Asm.js的简单介绍
  • avalon2.2的VM生成过程
  • Docker容器管理
  • FineReport中如何实现自动滚屏效果
  • httpie使用详解
  • javascript面向对象之创建对象
  • Java反射-动态类加载和重新加载
  • Leetcode 27 Remove Element
  • 关于Flux,Vuex,Redux的思考
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • (1)svelte 教程:hello world
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (floyd+补集) poj 3275
  • (javaweb)Http协议
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)http协议
  • (转)setTimeout 和 setInterval 的区别
  • (转)大型网站架构演变和知识体系
  • (自用)仿写程序
  • .apk文件,IIS不支持下载解决
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Remoting学习笔记(三)信道
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .sh 的运行
  • @SpringBootApplication 注解
  • @synthesize和@dynamic分别有什么作用?