JAVA:String类详解(快速掌握String的使用)

1、前言

String类是我们用来处理字符串的常用类。

在接下来,我会通过讲解:

创建String的方式->String之间的比较->String类的常用方法

来帮助你掌握String类的基本用法。

2、String的使用

2.1 创建String

创建String多种多样,这里列举了常用的几种。

有一点要注意,如果要通过byte数组创建字符串,byte数组中的单个值不能大于127,因为这里是通过ASCII码表来对应的。

// 直接对“zjx”引用 String string01 = "zjx"; // 将“zjx”传入构造方法进行构建 String string02 = new String("zjx"); // 通过字符数组构建 String string03 = new String(new char[]{'z','j','x'}); // 通过字节数组构建 String string04 = new String(new byte[]{97,98,99}); // 通过字节数组和索引构建 String string05 = new String(new byte[]{97,98,99},0,2); // 通过字符数组和索引构建 String string06 = new String(new char[]{'z','j','x'},0,2);

String类的构造方法

2.2 String之间的比较

2.2.1 比较方式

一般情况下,String之间的比较是通过String类重写的equals方法来判定。

2.2.2 equals详解

String类重写的equals方法:

1 判断比较对象是否为自身 ,是则返回true ,不是则进行下一步。

2 判断比较对象是否为String类型 , 不是则返回false , 是则进行下一步。

3 字符串压缩功能是否被禁用 ,若禁用则跳到步骤4,为禁用则跳到步骤5。

4 若启用压缩,仅当两字符串编码相同时才继续比较,相等则下一步 , 不相等则返回false。

5 判断两个String类底层的

@Stable private final byte[] value; //其实就是表现出来的字符串

是否一致,并返回结果。

2.3 常用方法

// equals区分大小写,判断内容是否一致 System.out.println("zjx 与 ZJX :" + "zjx".equals("ZJX")); // equalsIgnoreCase忽略大小写,判断内容是否一致 System.out.println("zjx 与 ZJX :" + "zjx".equalsIgnoreCase("ZJX")); // length获取字符串长度 System.out.println("zjx".length()); // indexOf获取字符在字符串中第一次出现的索引,若不存在该字符,返回-1 System.out.println("zjxzjx".indexOf("z")); // indexOf获取字符在字符串中最后一次出现的索引,若不存在该字符,返回-1 System.out.println("zjxzjx".lastIndexOf("z")); // split根据该字符分割字符串,若该字符不存在于字符串中,则不分割 System.out.println("zjxzjx".split("z").length); // substring从指定索引处截取指定个数的字符串 System.out.println("zjxzjx".substring(1,2)); // trim去除前后空格 System.out.println(" zjxzjx ".trim()); // 获取在指定索引处的字符 System.out.println("zjx".charAt(1));

3、结束语

像“zjx”这种后面也是可以直接调用String类的方法,在两个String比较时,若一方一致固定,推荐让“zjx”这种字符串来调用equals,来避免空指针异常。

String类型的值是不可改变的,所发生的字符串变化,只不过是引用发生了变化。

Read more

【Java 开发日记】运行时有出现过什么异常?

【Java 开发日记】运行时有出现过什么异常?

目录 第一类:常见的运行时异常 第二类:业务相关的特定异常 第三类:框架和集成相关的异常 需要避免的坑 总结 在我的项目开发和生产运维中,遇到的异常可以归纳为以下几类: 第一类:常见的运行时异常 这类异常通常是由于编码疏忽或逻辑不严谨造成的。 * 空指针异常 * 场景: 最经典的比如:调用 null 对象的方user.getName(), 从Map中get一个不存在的键返回null后继续操作,或者自动拆箱Integer为int时对象为null。 * 原因与解决: 根本原因是缺少null值判断。我的解决方法是:1)在调用前进行判空;2)使用Optional类来优雅地处理可能为null的情况;3) 在获取 Map 值时使用getOrDefault方法。 * 类型转换异常 * 场景: 在使用集合框架时,比如从一个声明为List的集合里取出一个元素并强转为String,但实际上里面存放的是Integer。 * 原因与解决: 原因是类型不安全。解决方法是:1)在使用泛型集合时,始终指定具体的类型参数,利用编译器的类型检查;2)在强制转换前使用inst

By Ne0inhk
加密与编码算法全解:从原理到精通(Java & JS 实战版)

加密与编码算法全解:从原理到精通(Java & JS 实战版)

文章目录 * 1. 核心概念地图 * 2. 对称加密:AES 的内部解剖与实战 * 2.1 AES 单轮变换流程图 * 2.2 分组模式详解:ECB vs CBC * 2.3 实战:AES-GCM 加密与解密 * Java (JDK 11+) * JavaScript (Node.js) * 3. 非对称加密:RSA 的数理逻辑 * 3.1 RSA 密钥生成流程图 * 3.2 填充的重要性:OAEP * 3.3 实战:RSA-OAEP 加密与解密 * Java (JDK 11+) * JavaScript (Node.

By Ne0inhk
2025年第十六届蓝桥杯省赛JavaB组真题回顾

2025年第十六届蓝桥杯省赛JavaB组真题回顾

第16届蓝桥杯省赛已经结束了,第一次参加也是坐牢了4个小时,现在还是来总结一下吧(先声明以下的解法,大家可以当作一种思路来看,解法不一定是正解,只是给大家提供一种能够正常想到的思路吧) 试题A:逃离高塔 本题其实没有什么难度,就是一个循环遍历即可,那么唯一需要注意的就是循环遍历的过程中,int是会爆的,这里需要用long来进行存储 public class Main{ public static void main(String[] args){ int ans=0;//记录最终答案 for(long i=1;i<=2025;i++){ long x=i*i*i; if(n%10==3){ ans++; } } System.out.println(ans); } } ​  最后进行的答案就是:

By Ne0inhk
【Java 开发日记】什么是线程池?它的工作原理?

【Java 开发日记】什么是线程池?它的工作原理?

目录 一、什么是线程池? 二、线程池的核心工作原理 核心组件 工作流程详解(结合上图) 补充:线程回收 三、Java中的线程池实现 (ThreadPoolExecutor) 核心构造函数 常见的任务队列 (workQueue) 内置的拒绝策略 四、通过 Executors 工具类创建的常见线程池 五、最佳实践与总结 一、什么是线程池? 核心思想: 线程池是一种基于“池化”思想来管理线程的工具。它预先创建好一定数量的线程,放入一个“池子”中,当有任务需要执行时,就从池子中取出一个空闲线程来执行任务,任务执行完毕后,线程并不被销毁,而是返回池中等待执行下一个任务。 为什么需要线程池? 在深入原理之前,我们先想想如果不使用线程池,我们如何处理多任务: // 原始方式:为每个任务创建一个新线程 for (int i = 0; i <

By Ne0inhk