Java-String的用法

2023-10-27

Java-String的用法

1.介绍

String类定义时,首字母大写,String本身也是一个类本类,在Java中是一种比较特殊的类。

2.实例化String的两种方法

public class Mytset01 {
    public static void main(String []argc){
        String s1 = new String("hello"); //第一种方式通过new的形式
        System.out.println(s1);

        String s2 = "hello";
        System.out.println(s2); //第二种方式,直接赋值的形式
    }
}

在这里插入图片描述两者的具体区别后面详解

3.String内容的比较

通常我们用==来对基本的数据类型进行比较,如

public class Mytset01 {
    public static void main(String []argc){
        int a=3;
        int b=4;
        System.out.println("两个数的比较结果"+(a==b));
    }
}

3.1使用“==”进行基本数据类型的比较

在这里插入图片描述

3.2String中使用“==”比较字符串的内容

在这里插入图片描述虽然String的内容是一样的,但是比较结果却有差异,给出以下解释
我们都知道栈空间存放着堆空间的引用地址,通过栈空间的对象名可以找得到相应堆空间的内容
s1指向堆空间内容"hello"
s2因为是new的一块空间,虽然内容相同,但是在堆空间还会开辟一块地址存放着hello
s2同时把引用的地址交给了s3,此时s2和s3指向了同一个堆空间的地址,因为s2把引用的地址交给了s3
如图所示

在这里插入图片描述
总结:

  • ==通常进行基本数据类型的比较
  • 在String中的==进行地址的比较

3.3使用equals方法进行String内容的比较

public class Mytset01 {
    public static void main(String []argc){
        String s1 = "hello";
        String s2 = new String("hello");
        System.out.println(s1.equals(s2));
    }
}

在这里插入图片描述equals方法就是进行内容的比较此处返回true

4.String两种实例化的方式的区别

4.1直接赋值的方式

public class Mytset01 {
    public static void main(String []argc){
        String s1 = new String("hello"); //第一种方式通过new的形式
        System.out.println(s1);

        String s2 = "hello";
        System.out.println(s2); //第二种方式,直接赋值的形式
    }
}

首先明白一个字符串其实就是一个String匿名对象,而匿名对象只能被一次实例化,匿名对象其实就是已经开辟了堆空间并可以直接使用的对象。

public class Mytset01 {
    public static void main(String []argc){
        System.out.println("hello".equals("hello"));
    }
}

在这里插入图片描述
直接赋值的方式,其实就是把匿名对象的堆空间的地址的使用权交给了实例化对象,该对象保存着堆空间的引用地址。
在这里插入图片描述
如果一个字符串已经被一个名称应用,以后再有相同的字符串声明时,就不会再重新开辟空间,而继续使用已经开辟好的堆内存。
演示:

public class Mytset01 {
    public static void main(String []argc){
        String s1 = "hello";
        String s2 = "hello";
        String s3 = "hello";
        String s4 = "hello";
        System.out.println((s1==s2));
        System.out.println((s1==s3));
        System.out.println((s1==s4));
    }
}

在这里插入图片描述
也就是说s1,s2,s3,s4共同指向同一个堆内存的地址
记住当String使用直接赋值的方式之后,只要以后再引用字符串的相关内容,就不会在开辟新的堆空间的内存了
如图所示:
在这里插入图片描述

4.2new的方式

public class Mytset01 {
    public static void main(String []argc){
        String s1 = new String("hello");
    }
}

在这里插入图片描述解释:
一个字符串就是一个匿名对象,如果使用new关键字,不管任何会重新开辟一个新的空间出来,但真正使用的只是一个new关键字开辟出来的堆空间,另一个匿名对象开辟出来的堆空间就浪费了,就是垃圾空间了。
如图所示:
在这里插入图片描述

5.字符串的内容不可变

字符串一旦声明则不可以改变

5.1修改字符串的内容

public class Mytset01 {
    public static void main(String []argc){
       String s1="hello";
       s1=s1+"java";
        System.out.println("s1="+s1);
    }
}

在这里插入图片描述
看似好像改变了,其实没有变
如图所示:
在这里插入图片描述
其实只是改变了堆内存地址的指向,通过内存地址的断开-连接变化完成的,而本身字符串的内容没有改变。

6.String类中常用的方法

6.1取得一个字符串的长度

在String中使用length()方法取得字符串长度

public class Mytset01 {
    public static void main(String []argc){
       String s1="hello";
       String s2="hello-java";
        System.out.println(s1.length());
        System.out.println(s2.length());
    }
}

在这里插入图片描述

6.2判断一个字符串是否存在

在String中使用indexof()方法,可以返回指定的字符串的位置,如果不存在就返回-1
注意:java字符串位置从0开始

public class Mytset01 {
    public static void main(String []argc){
       String s1="hello";
       String s2="hello-java";
        System.out.println(s1.indexOf("h"));
        System.out.println(s2.indexOf("H"));
    }
}

在这里插入图片描述

6.3去掉左右空格

可以使用trim()方法去除字符串的左右空格

public class Mytset01 {
    public static void main(String []argc){
       String s1="   hello       ";
        System.out.println(s1);
        System.out.println(s1.trim());
    }
}

在这里插入图片描述

6.4字符串的截取

在String中提供了两个substring()方法,一个从指定位置截取到字符串的末尾,另一个是截取指定范围的内容。

public class Mytset01 {
    public static void main(String []argc){
       String s1="hello,myname";
        System.out.println(s1.substring(2));
        System.out.println(s1.substring(6,12));
    }
}

在这里插入图片描述

6.5按照指定的字符串拆分字符串

在String中通过split()方法可以将字符串进行拆分的操作,拆分的数据通过字符串数组的形式返回。

public class Mytset01 {
    public static void main(String []argc){
       String s1="hello,myname";
        String[] split = s1.split(",");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }

    }
}

在这里插入图片描述

6.6字符串的大小写转换

在String中,通过toUpperCase()和toLowCase()两个方法完成字符串的大小写的转换操作。

public class Mytset01 {
    public static void main(String []argc){
       String s1="hello,myname";
       String s2="HELLO,MYNAME";
        System.out.println(s1.toUpperCase());
        System.out.println(s2.toLowerCase());
    }
}

在这里插入图片描述

6.7不区分大小写的字符串的比较

在String中,通过equalsIgnoreCase()方法进行比较。

public class Mytset01 {
    public static void main(String []argc){
       String s1="hello,myname";
       String s2="HELLO,MYNAME";
        System.out.println(s1.equals(s2));
        System.out.println(s1.equalsIgnoreCase(s2));
    }
}

在这里插入图片描述

6.8将一个指定的字符串替换成其他的字符串

在String中,通过replaceAll()方法可以将字符串的指定内容进行替换。

public class Mytset01 {
    public static void main(String []argc){
       String s1="hhaabbddxx";
        System.out.println(s1.replace("b","B"));
    }
}

在这里插入图片描述

7.引用传递基本应用

7.1对象引用传递

案例一

class Demo{
    int temp=30;
}

public class Mytset01 {
    public static void main(String []argc){
      Demo demo=new Demo();
      demo.temp=59;
      System.out.println(demo.temp);
       fun(demo);
        System.out.println(demo.temp);
    }
    public static void fun(Demo d){
        d.temp=1000;
    }
}

在这里插入图片描述
分析:
new demo()的时候开辟了堆内存,里面存放着Demo类的属性temp=30,随后将demo.temp=50,随后调用函数,因为d是局部变量,50地址的引用交给了demo和d,共同指向temp=50的内存地址,当函数调用完,局部变量就消失了,也就是断开了指向1000的连接。

案例二

public class Mytset01 {
    public static void main(String []argc){
        String s1 = "hello";
        System.out.println(s1);
        fun(s1);
        System.out.println(s1);
}
        public static void fun(String f){
            f="me";
        }
}

在这里插入图片描述请自行分析
案例三

class Demo{
    String temp = "hello";
}

public class Mytset01 {
    public static void main(String []argc){
        Demo demo=new Demo();
        demo.temp = "wold";
        System.out.println(demo.temp);
        fun(demo);
        System.out.println(demo);
}
        public static void fun(Demo d){
            d.temp="me";
        }
}

在这里插入图片描述

分析和第一个案例一样,因为String是作为一个Demo类的属性存在,操作时更改了类中的属性内容,所以改变了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java-String的用法 的相关文章

  • HTTP 状态 404 - 请求的资源不可用

    在使用 MyEclipse IDE 中的 Tomcat 服务器和 Struts 2 框架时 我遇到了反复出现的问题 我将我的程序作为服务器应用程序运行 当它运行时 默认的index jsp 文件将成功打开 但应用程序的其他过去都不起作用 当
  • 是否可以在 Spring Batch 中结合分区和并行步骤?

    我只是想知道它在 Spring Batch 中可行吗 Step1Step2 流程 gt 流程1 流程2 流程3 Step3 其中每个flow1 gt 划分为 5 个 GridSizeflow2 gt 划分为 5 个 GridSizeflow
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public
  • 尝试使用带有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)

    当使用 Java Google Play Developer API 版本 3 并请求有效购买令牌的购买信息时 我收到以下异常 API 调用返回 400 Bad Request 响应以及以下消息 code 400 errors domain

随机推荐

  • IDEA单元测试控制台不能输入数据

    问题 在使用IDEA写单元测试方法 其中包含了输入语句 但在控制台无法输入数据 解决方案 其实这个是IDEA本身的配置问题 我们只需要修改IDEA 添加相应配置文件就好啦 具体操作如下 选择最上方工具栏中的Help gt Edit Cust
  • git pull时报错:Your local changes to the following files would be overwritten by merge

    1 产生原因 这种情况一般是由于 你在工作区修改了一些代码 但是还不打算提交 这时同步主干代码的时候 如果你修改的文件与主干分支的代码有冲突 那么拉取主干分支代码时就会报这个错误 2 简单示例 下面我通过一个简单的例子给大家展示一下这个报错
  • 正弦积分与余弦积分函数

    文章目录 一 被积分函数分析 二 积分函数分析 参考 在看天线理论时遇到了正弦积分与余弦积分函数 为了更好的理解这个函数的性质 使用Python将这两个函数的图像复现出来 同时画了被积函数的图像 图1 书上的公式示例 正弦积分函数 S i
  • mysql 实现批量添加和更新功能

    mapper xml文件配置 单独添加
  • 计算机毕业设计springboot基于Hadoop平台的电影推荐系统541039【附源码+数据库+部署+LW】

    本项目包含程序 源码 数据库 LW 调试部署环境 文末可获取一份本项目的java源码和数据库参考 系统的选题背景和意义 选题背景 随着互联网的快速发展和大数据技术的成熟应用 电影推荐系统成为了电影行业中不可或缺的一部分 基于Hadoop平台
  • opengl es 3D要素——贴图

    前不久开始了正式的opengl es学习 目前为止 成就有 显示一些三维元素 一些可以自由旋转 一些可以用手指控制左右上下的旋转 下一步准备开始写光照了 在此之前先整理下思路 我的工程已经开始变得庞大了 需要声明下 我不太会把全部的代码贴出
  • 学计算机专业的打字要快么,怎样学电脑打字最快电脑新手如何快速学会打字

    01 在零基础的情况下 通过自学快速掌握键盘打字也是需要下一定的功夫的 首先需要说明的是 键盘上有很多按键 一个键盘具有许多的功能 分为了不同的区域 平常使用最多的是主键盘区 而在电脑上打字使用最多的是主键盘区里标有英文大写字母的26个键
  • javascript中的数据类型转换

    个人简介 作者简介 大家好 我是阿牛 个人主页 馆主阿牛 支持我 点赞 收藏 留言 系列专栏 web开发 格言 迄今所有人生都大写着失败 但不妨碍我继续向前 javascript中的数据类型转换 个人简介 前言 数值型转换为字符串类型 字符
  • 如何通过本地搭建wamp服务器并实现无公网IP远程访问

    文章目录 前言 1 Wamp服务器搭建 1 1 Wamp下载和安装 1 2 Wamp网页测试 2 Cpolar内网穿透的安装和注册 2 1 本地网页发布 2 2 Cpolar云端设置 2 3 Cpolar本地设置 3 公网访问测试 4 结语
  • Linux系统下串口调试助手putty,cutecom,xgcom

    系统 linux mint 18 3 xfce 64bit 串口驱动 ch340 系统已自带 没有测试pl2302 尝试了几个linux下的串口调试助手 这里总结一下 由于使用的是USB转串口 CH340 所以在 dev 目录下面看到的串口
  • 人脸识别经典算法三:Fisherface(LDA)

    Fisherface是由Ronald Fisher发明的 想必这就是Fisherface名字由来 Fisherface所基于的LDA Linear Discriminant Analysis 线性判别分析 理论和特征脸里用到的PCA有相似之
  • [杂乱笔记]algorithm头文件下的常用函数

    使用algorithm头文件 需要在头文件加using namespace std 1 常见的函数 max min abs swap int x 98 int y 7 int z 12 printf d d n max x y min y
  • 详细解剖大型H5单页面应用的核心技术点

    阐述下项目 Xut js 开发中一个比较核心的优化技术点 这是一套平台代码 并非某一个插件功能或者框架可以直接拿来使用 核心代码大概是6万行左右 不包含任何插件 这也并非一个开源项目 不能商业使用 只是为了作者开发方便同步修改代码而上传的源
  • FISCO-BCOS 八、ubuntu配置Java环境

    ubuntu配置Java环境需根据自己的java版本号进行细节修改 本文以jdk11 0 18版本为例 一 安装Java 安装默认Java版本 Java 8或以上 sudo apt install y default jdk 查询Java版
  • GPFS文件系统分析

    什么是GPFS文件系统 GPFS General Parallel File System 是IBM公司开发的高性能集群文件系统 从1998年 开始首先应用于AIX集群 2001年后应用于Linux集群 在集群的环境中 GPFS文件系统允许
  • 关于路由, 我好奇的那些点

    最近解锁了一个拯救自我的新技能 就是学习之前 可以先观察下知识时间线 相关人物 以及其他背景等 让那些规则不再变得辣么无聊 什么是路由 通俗的讲就是根据不同的url展示不同页面或者内容 路由的发展阶段 路由的概念最开始是在后端出现的 在以前
  • 大牛用十年功力带你彻底理解JVM垃圾回收器:ZGC,回收设计

    回收设计 ZGC的并发回收算法采用的也是 目的空间不变性 的设计 关于目的空间不变性的更多内容可以参考第7章 在第7章中提到 Shenandoah从JDK 13开始也采用 目的空间不变性 的设计 但是ZGC与Shenandoah相比 还是有
  • 前端页面多字段模糊查询

    前端页面多字段模糊查询 本文主要参考了大佬们的内容 整合记录一下具体内容 1 实现代码 arr是前端原有的列表数组 后台返回来的数据 var arr id 1 aa asd bb 阿斯顿 cc 123 id 2 aa Awr bb 艾沃瑞
  • 云原生 AI 工程化实践之 FasterTransformer 加速 LLM 推理

    01 背景 OpenAI 在 3 月 15 日发布了备受瞩目的 GPT4 它在司法考试和程序编程领域的惊人表现让大家对大语言模型的热情达到了顶点 人们纷纷议论我们是否已经跨入通用人工智能的时代 与此同时 基于大语言模型的应用也如雨后春笋般出
  • Java-String的用法

    Java String的用法 文章目录 Java String的用法 1 介绍 2 实例化String的两种方法 3 String内容的比较 3 1使用 进行基本数据类型的比较 3 2String中使用 比较字符串的内容 3 3使用equa