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

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值