Java 面向对象编程进阶七(字符串 String )

目录

字符串 String

String 基础

String 类和常量池

String 类常用的方法

String 类常用方法一

String 类常用方法二

字符串相等的判断


字符串 String

        String 是我们开发中最常用的类,我们不仅要掌握 String 类常见的方法,对于 String 的 底层实现也需要掌握好,不然在工作开发中很容易犯错。

String 基础

  • String 类又称作不可变字符序列。
  • String 位于 java.lang 包中,Java 程序默认导入 java.lang 包下的所有类。
  • Java 字符串就是 Unicode 字符序列,例如字符串“Java”就是 4 个 Unicode 字 符’J’、’a’、’v’、’a’组成的。
  • Java没有内置的字符串类型,而是在标准Java类库中ᨀ供了一个预定义的类String, 每个用双引号括起来的字符串都是 String 类的一个实例。

String 类的简单使用

String e = "" ; // 空字符串
String greeting = " Hello World ";

Java 允许使用符号"+"把两个字符串连接起来。

字符串连接

String s1 = "Hello";
String s2 = "World! ";
String s = s1 + s2; //HelloWorld!

符号"+"把两个字符串按给定的顺序连接在一起,并且是完全按照给定的形式

当"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将 另一个操作数转换为字符串然后再进行连接。

"+"连接符

int age = 18;
String str = "age is" + age; //str 赋值为"age is 18"
//这种特性通常被用在输出语句中:
System.out.println("age is" + age);

String 类和常量池

        在 Java 的内存分析中,我们会经常听到关于“常量池”的᧿述,实际上常量池也分了 以下三种:

1. 全局字符串常量池(String Pool)
        全局字符串常量池中存放的内容是在类加载完成后存到 String Pool 中的,在每个 VM 中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。

2. class 文件常量池(Class Constant Pool)
        class 常量池是在编译的时候每个 class 都有的,在编译阶段,存放的是常量(文本字符 串、final 常量等)和符号引用。

3. 运行时常量池(Runtime Constant Pool)
        运行时常量池是在类加载完成之后,将每个 class 常量池中的符号引用值转存到运行时 常量池中,也就是说,每个 class 都有一个运行时常量池,类在解析之后,将符号引用替换 成直接引用,与全局常量池中的引用值保持一致。

常量池

String str1 = "abc";
String str2 = new String("def");
String str3 = "abc";
String str4 = str2.intern();
String str5 = "def";
System.out.println(str1 == str3);// true
System.out.println(str2 == str4);// false
System.out.println(str4 == str5);// true

        首先经过编译之后,在该类的 class 常量池中存放一些符号引用,然后类加 载之后,将 class 常量池中存放的符号引用转存到运行时常量池中,然后经过验证,准备阶 段之后,在堆中生成驻留字符串的实例对象(也就是上例中 str1 所指向的“abc”实例对象), 然后将这个对象的引用存到全局 String Pool 中,也就是 String Pool 中,最后在解析阶段, 要把运行时常量池中的符号引用替换成直接引用,那么就直接查询 String Pool,保证 String Pool 里的引用值与运行时常量池中的引用值一致,大概整个过程就是这样了。

String 类常用的方法

String 类的常用方法列表
方法解释说明
char charAt(int index)返回字符串中第 index 个字符
boolean equals(String other)如果字符串与 other 相等,返回 true;否则,返回 false
boolean equalsIgnoreCase(String other)如果字符串与 other 相等(忽略大小写),则返回 true;否则, 返回 false。
int indexOf(String str)返回从头开始查找第一个子字符串 str 在字符串中的索引位 置。如果未找到子字符串 str,则返回-1。
lastIndexOf()返回从末尾开始查找第一个子字符串 str 在字符串中的索引位 置。如果未找到子字符串 str,则返回-1。
int length()返回字符串的长度。
String replace(char oldChar,char newChar)返回一个新串,它是通过用 newChar 替换此字符串中出现的 所有 oldChar 而生成的。
boolean startsWith(String prefix)如果字符串以 prefix 开始,则返回 true。
boolean endsWith(String prefix)如果字符串以 prefix 结尾,则返回 true。
String substring(int beginIndex)返回一个新字符串,该串包含从原始字符串beginIndex到串尾。
String substring(int beginIndex,int endIndex)返回一个新字符串,该串包含从原始字符串 beginIndex 到串尾 或 endIndex-1 的所有字符。
String toLowerCase()返回一个新字符串,该串将原始字符串中的所有大写字母改成 小写字母。 
String toUpperCase()返回一个新字符串,该串将原始字符串中的所有小写字母改成 大写字母。
String trim()返回一个新字符串,该串删除了原始字符串头部和尾部的空 格。
String 类常用方法一
public class StringTest1 {
    public static void main(String[ ] args) {
        String s1 = "core Java";
        String s2 = "Core Java";
        System.out.println(s1.charAt(3));//ᨀ取下标为 3 的字符
        System.out.println(s2.length());//字符串的长度
        System.out.println(s1.equals(s2));//比较两个字符串是否相等
        System.out.println(s1.equalsIgnoreCase(s2));//比较两个字符串(忽略大小写)
        System.out.println(s1.indexOf("Java"));//字符串 s1 中是否包含 Java
        System.out.println(s1.indexOf("apple"));//字符串 s1 中是否包含 apple
        String s = s1.replace(' ', '&');//将 s1 中的空格替换成&
        System.out.println("result is :" + s);
    }
}

String 类常用方法二
public class StringTest1 {
    public static void main(String[ ] args) {
        String s = "";
        String s1 = "How are you?";
        System.out.println(s1.startsWith("How"));//是否以 How 开头
        System.out.println(s1.endsWith("you"));//是否以 you 结尾
        s = s1.substring(4);//ᨀ取子字符串:从下标为 4 的开始到字符串结尾为止
        System.out.println(s);
        s = s1.substring(4, 7);//ᨀ取子字符串:下标[4, 7) 不包括 7
        System.out.println(s);
        s = s1.toLowerCase();//转小写
        System.out.println(s);
        s = s1.toUpperCase();//转大写
        System.out.println(s);
        String s2 = " How old are you!! ";
        s = s2.trim();//去除字符串首尾的空格。注意:中间的空格不能去除
        System.out.println(s);
        System.out.println(s2);//因为 String 是不可变字符串,所以 s2 不变
    }
}

字符串相等的判断
  • equals 方法用来检测两个字符串内容是否相等。如果字符串 s 和 t 内容相等,则 s.equals(t)返回 true,否则返回 false。
  • 要测试两个字符串除了大小写区别外是否是相等的,需要使用 equalsIgnoreCase 方 法。
  • 判断字符串是否相等不要使用"=="。

忽略大小写的字符串比较

"Hello".equalsIgnoreCase("hellO");//true

字符串的比较:"= ="与 equals()方法

public class StringTest1 {
    public static void main(String[ ] args) {
        String g1 = "学习Java!";
        String g2 = "学习Java!";
        String g3 = new String("学习Java!");
        System.out.println(g1 == g2); // true 指向同样的字符串常量对象
        System.out.println(g1 == g3); // false g3 是新创建的对象
        System.out.println(g1.equals(g3)); // true g1 和 g3 里面的字符串内容是一样的
    }
}

内存分析如下: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/474387.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js+SpringBoot开发智能教学资源库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程档案表3.2.2 课程资源表3.2.3 课程作业表3.2.4 课程评价表 四、系统展示五、核心代…

多进程数据库不适合作为hive的元数据库

简介 “今天发现一个比较奇怪的现象,因为博主不熟悉mysql,所以在安装hive的使用了postgresql作为hive的元数据库,在测试几个连接工具对hive进行链接,后面再测试的时候发现链接不上了,并且报错日志如下:” …

【记录39】html element-ui 加载

环境 html使用element-ui组件、用vue框架搭建 方法一: 方法二(推荐) 将相关资源下载下来,在对应的html文件中相对路径引入。注意:css加载放在js之前

导航栏还是侧栏?flutter 跨平台适配指南

介绍 引言:Flutter 的跨平台特性 Flutter 是由 Google 开发的一款跨平台应用开发框架,它具有许多优点,包括性能优异、开发效率高以及良好的用户体验等。其中,最引人注目的特性之一就是其出色的跨平台能力。通过编写一套代码&…

数学建模(熵权法 python代码 例子)

目录 介绍: 模板: 例子:择偶 极小型指标转化为极大型(正向化): 中间型指标转为极大型(正向化): 区间型指标转为极大型(正向化)&#xff1a…

电脑设备管理器在哪?这里有详细指南!

电脑设备管理器是Windows操作系统中一个重要的工具,它允许用户查看和管理计算机中的硬件设备。无论是查找设备驱动程序、识别硬件问题还是管理设备属性,设备管理器都是一个不可或缺的工具。在本文中,我们将介绍三种常见的方法,以分…

Docker容器化技术(docker-compose安装部署案例)

docker-compose编排工具 安装docker-compose [rootservice ~]# systemctl stop firewalld [rootservice ~]# setenforce 0 [rootservice ~]# systemctl start docker[rootservice ~]# wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-…

Python——pgzero游戏打包exe执行时报错

Python——pgzero游戏打包exe执行时报错 记录一次使用 pgzero 开发游戏,使用 pyinstaller 打包时报错 目录结构: 1. 第一次报错 打包指令: pyinstaller -Fw .\code.py结果打开报错 报错如下: Traceback (most recent call…

【机器学习300问】39、高斯分布模型如何实现异常检测?

一、异常检测是什么? (1)举几个例子 ① 信用卡交易异常检测 在信用卡交易数据分析中,如果某个用户的消费习惯通常是小额且本地化消费,那么突然出现一笔大额且跨国的交易就可能被标记为异常。 ② 电机温度异常检测 在电…

软考 系统架构设计师系列知识点之云原生架构设计理论与实践(1)

所属章节: 第14章. 云原生架构设计理论与实践 第1节 云原生架构产生背景 云原生(Cloud Native)是近几年云计算领域炙手可热的话题,云原生技术已成为驱动业务增长的重要引擎。同时,作为新型基础设施的重要支撑技术&…

新一代 数据安全管理平台是什么,对于各行各业的公司又有什么价值?

新一代数据安全管理平台,在数据安全建设体系中可发挥“全局风险治理、统一指挥调度”的重要作用,为用户提供跨数据类型、存储孤岛和生态系统集成数据的产品和服务,从而实现更简单、一致的数据安全。 数据安全管理平台是以数据访问行为分析为基…

Redis如何设置键的生存时间或过期时间

键的生存时间或过期时间 概述。 通过EXPIRE命令或者PEXIPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间(Time To Live,TTL),在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为0的键: 127.0.0.1:6379>…

Oracle:ORA-01830错误-更改数据库时间格式

1,先把报错SQL语句拿出来执行,看看是不是报的这个错 ORA-01830: 日期格式图片在转换整个输入字符串之前结束 2,然后查看默认日期格式是不是“YYYY-MM-DD HH24:MI:SS”(正确格式)。; 执行: SELECT * FRO…

美团24秋招第一套笔试试题

小美的字符串匹配度 我的代码(16/20) import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextL…

Apache Superset

前言 最近在准备一个小的项目,需要对 Hive 的数据进行展示,所以想到了把 Hive 的数据导出到 MySQL 然后用 Superset 进行展示。 Superset 1.1 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接…

表格固定行固定列问题

效果图 代码&#xff1a; 1.第一部分&#xff1a;表格固定行&#xff1a;用合计行来实现 <el-tableclass"fixedRowcol":data"tableData"bordershow-summarysum-text"合计"ref"table"></el-table> 2.第二部分&#xff1…

Docker 【通过Dockerfile构建镜像】【docker容器与镜像的关系】

文章目录 前言一、前期的准备工作二、上手构建一个简单的镜像三、DcokerFile1 指令总览2 指令详情 四、Dockerfile文件规范五、docker运行build时发生了什么?六、调试手段1. 修改镜像打包后&#xff0c;如何验证新内容已更新至镜像 七、Dockerfile优化方案 前言 docker构建镜…

【Spark编程基础】实验三RDD 编程初级实践(附源代码)

目录 一、实验目的二、实验平台三、实验内容1.spark-shell 交互式编程2.编写独立应用程序实现数据去重3.编写独立应用程序实现求平均值问题 一、实验目的 1、熟悉 Spark 的 RDD 基本操作及键值对操作&#xff1b; 2、熟悉使用 RDD 编程解决实际具体问题的方法 二、实验平台 …

burpsuit教程汉化+Repeater(非常详细),从零基础入门到精通,看完这一篇就够了

前言&#xff1a;释疑解惑 《BP使用教程一》发布后&#xff0c;后台收到了许多小伙伴的私信问BP是怎么汉化的&#xff0c;在这里统一为大家解答一下。 BP的汉化依赖于汉化jar包&#xff0c;在启动时引入汉化包即可&#xff0c;废话不多说&#xff0c;直接上命令&#xff1a; …

MySQL:基础篇

一、数据库概述 基本概念 RDBMS&#xff08;关系型数据库&#xff09;和非DBMS对比 RDBMS 实质&#xff1a; 优势&#xff1a; 非DBMS 介绍&#xff1a; 类型&#xff1a; RDBMS设计规则 表、字段、记录 表之间的关联关系 1、一对一 2、一对多 3、多对多 4、自我引用 二、…