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

JAVA知识点全面总结3:String类的学习

三.String类学习

1.String,StringBuffer,StringBuilder的区别?

2.字符串拼接用加号的原理 ?

3.字符串常量池如何理解?

4.String的intern方法理解?

5.String的equals方法和compareTo方法的使用?

6.String常用方法?

7.String类和StringBuffer类的常用方法?

待更新

待更新

三.String类学习

1.String,StringBuffer,StringBuilder的区别?

①不可变性

  • String是不可变的,value为final且指向字面量,无修改方法
  • StringBuffer和StringBuilder是可变的,value直接保存在堆中,有修改方法

②线程安全

  • String,StringBuffer线程安全,StringBuffer解决线程安全
  • StringBuilder线程不安全,StringBuilder只是建立可变字符串

③使用流程

  • String 少量改变可以用(重新生成字面量并放入常量池)
  • StringBuilder单线程多次改变(线程不安全,但是改变字符串在堆中数组中改变)
  • StringBuffer多线程多次改变(线程安全,而且改变字符串在堆中数组中改变)

④String为什么不变呢?

  • final修饰的value数组引用为final类型(只是数组地址不变,数组内容仍然可变)
  • private修饰value数组外部无法直接访问,String类未提供修改数组元素的方法。
  • 而StringBuffer和StringBuilder都提供对value数组操作的方法

2.字符串拼接用加号的原理 ?

①str1 = str2 + str3(都为变量)

  • 实际上 str1 = (new StringBuilder()).append(str1).append(str2).toString
  • 实际上 新建了StringBuilder对象并转换为String对象

②str3 = str2.concat()

  • 实际上,产生了新的String对象,并将字符串通过新建数组的形式凭借,将数组作为new String的参数获得新的String对象
  • 即str2.concat()新建String对象,然后将
  • 注意:除非String直接赋值给字符串,否则调用函数都是生成String类的对象。
  • 代码
package stringtest;public class StrinParaTest {public static void main(String[] args) {char[] a = new char[]{'a','b','c'};String b = new String(a);System.out.println(b);//abcString d1 = b.concat("d");//concat实际上最后以new String(新数组)System.out.println(d1);//abcdString s = a.toString();//a.toString实际上是以字符串类型返回的地址,也就是字符串 只不过是地址的字符串System.out.println(s);//C@1540e19d//故新建String对象由于String对象重写了toString方法,故打印的为字符串//而cahr[]类型的数组并未重写toString,故其toString返回的是地址(字符串类型)}
}

③使用

  • 多次拼接用StringBuilder,因为用String也会产生很多的StringBuilder对象,而直接用StringBuilder只用产生一个

3.字符串常量池如何理解?

①方法区中有专门存放字符串的常量池

②String a = “abc”

  • 在常量池中生成了abc字符串,然后引用变量a直接赋值为常量池中的地址

②String b = new String(“abc”)

  • 若常量池已有abc,在堆中生成String对象,然后value指向常量池
  • 若常量池没有abc,则先在常量池生成abc,再最后用value指向常量池

4.String的intern方法理解?

①String a = “a” + “b”

  • 编译期常量会直接合并,故a指向常量池

②String b = “a” + a

  • 生成StringBuilder对象后生成String对象,value指向常量池

③String c = (“abc” + a).intern()

  • 此时c由value指向常量池直接转化c直接指向常量池

④代码解析

package stringtest;public class StringDiffTest {public static void main(String[] args) {String a = "a" + "b";String temp = "b";String b = "a" + temp;String c =("a" + temp).intern();System.out.println(a==b);//falseSystem.out.println(b==c);//falseSystem.out.println(a==c);//true//此时intern可以让引用直接指向常量池地址,故a=c,但是利用StringBuilder方法生成的String仍然还是指向堆中对象}
}

5.String的equals方法和compareTo方法的使用?

①String的equals方法重写

  • 即比较字符串

②String的compareTo方法

  • 实现Comparable接口
  • 重写CompareTo方法

6.String常用方法?

①字符串是否回文

  • String转换为char类型数组循环
  • StringBuilder和StringBuffer通过reverse + toString + equals来实现
    注意:因为StringBuilder和StringBuffer并未重写equals,故需要先转化

②字符串大写小写

  • String类型的 toUpperCase toLowerCase

③比较字符串

  • compareTo 和 compareToIgnore

④String ->char

  • char[] chars = str.tocharArray();
  • String str = new String(chars);

⑤String->byte

  • byte[] bytes = str.getBytes()
  • String str = new String(bytes)

⑥String->StringBuffer

  • String s = StringBuffer.toString()
  • String s = StringBuffer + “”
  • StringBuffer s = (new StringBuffer()).append(s)

7.String类和StringBuffer类的常用方法?

①String常用方法

  • length charAt concat equals getBytes toCharArrays toUpperCase toLowerCase

②StringBuffer常用方法

  • 增 append insert 删 delete 改 replace reverse 查 substring

③示例代码

package stringtest;public class StringTest {public static void main(String[] args) {//判断回文//1.String转化数组String a = "abcba";char[] chars = a.toCharArray();int t = 0;for(int i = 0;i<a.length()/2;i++){if(chars[i] == chars[a.length()-i-1]){t++;}}if(t==a.length()/2){System.out.println("是回文");}//2.String转化StringBuilderStringBuilder stringBuilder = (new StringBuilder()).append(a);String s = stringBuilder.reverse().toString();System.out.println("回文数:"+(s.equals(a)));//3.对String方法的使用String p = "likejin";//String重写了equals,toString,实现了compareToSystem.out.println(p.length());System.out.println(p.equals(p));System.out.println(p.toString());System.out.println(p.compareTo(p));//String和字节数组,char数组,StringBuffer的转换byte[] bytes = p.getBytes();String q = new String(bytes);char[] chars1 = p.toCharArray();String m = new String(chars);String s1 = new StringBuilder().append(p).toString();String n = s1.toString();//4.对StringBuilder方法的使用StringBuilder a1 = new StringBuilder("likejin");//增删改查a1.append("like");a1.insert(11,"changyu");a1.delete(0,2);a1.replace(9,14,"");a1.substring(0);System.out.println(a1);}
}

未更新

未更新

相关文章:

JAVA知识点全面总结3:String类的学习

三.String类学习 1.String&#xff0c;StringBuffer&#xff0c;StringBuilder的区别&#xff1f; 2.字符串拼接用加号的原理 &#xff1f; 3.字符串常量池如何理解&#xff1f; 4.String的intern方法理解&#xff1f; 5.String的equals方法和compareTo方法的使用&#xf…...

Eureka注册中心和Nacos注册中心详解以及Nacos与Eureka有什么区别?

目录&#xff1a;前言Eureka注册中心Nacos注册中心Nacos与Eureka有什么区别&#xff1f;前言提供接口给其它微服务调用的微服务叫做服务提供者&#xff0c;而调用其它微服务提供的接口的微服务则是服务消费者。如果服务A调用了服务B&#xff0c;而服务B又调用了服务C&#xff0…...

Web3D发展趋势以及Web3D应用场景

1&#xff0c;Web3D发展趋势随着互联网的快速发展&#xff0c;Web3D技术也日渐成熟&#xff0c;未来发展趋势也值得关注。以下是Web3D未来发展趋势的七个方面&#xff1a;可视化和可交互性的增强&#xff1a;Web3D可以为三维数据提供可视化和可交互性的增强&#xff0c;将极大地…...

2023-3-4 刷题情况

按位与为零的三元组 题目描述 给你一个整数数组 nums &#xff0c;返回其中 按位与三元组 的数目。 按位与三元组 是由下标 (i, j, k) 组成的三元组&#xff0c;并满足下述全部条件&#xff1a; 0 < i < nums.length 0 < j < nums.length 0 < k < nums.l…...

前端面试总结

1.引言 最近参加了大量的招聘会&#xff0c;投递了大量的简历&#xff0c;整整体会了从“随便找个厂上一下”——“还是的找个大厂”——“没人要”——“急了急了,海投一波”——“工资有点尬”——“海投中…”。简单说一下自己的一些感受吧&#xff0c;现在的前端属实有点尴…...

Geospatial Data Science (6): Spatial clustering

Geospatial Data Science (6): Spatial clustering 1.Clustering, spatial clustering, and geodemographics 本节涉及空间观测的统计聚类。许多问题和主题都是复杂的现象,涉及多个维度,难以归纳为一个单一的变量。在统计学术语中,我们把这一类问题称为多变量,而不是在…...

蚁群算法优化问题

%%%%%%%%%%%%蚁群算法解决 TSP 问题%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 m 50; %蚂蚁个数 Alpha 1; %信息素重要程度参数 Beta 5; %启发式因子重要程度参数 Rho 0.1; %信息素蒸发系数 G 20…...

为啥一个 main 方法就能启动项目

在 Spring Boot 出现之前&#xff0c;我们要运行一个 Java Web 应用&#xff0c;首先需要有一个 Web 容器&#xff08;例如 Tomcat 或 Jetty&#xff09;&#xff0c;然后将我们的 Web 应用打包后放到容器的相应目录下&#xff0c;最后再启动容器。 在 IDE 中也需要对 Web 容器…...

洛谷:P1554 梦中的统计 JAVA

思路&#xff1a;定义一个长度为10的数组&#xff0c;数组下标代表数组元素的数字&#xff0c;比如arr[0]代表数字0.用一个for循环&#xff0c;对每个数先取余再取整&#xff0c;知道取整得到的数为0&#xff0c;说明该数字已经被拆解完了。今天又学了一个输入&#xff0c;原来…...

C++初学笔记整理

目录 1. C关键字 2. 命名空间 1&#xff09;命名空间的引入和概述 2&#xff09;命名空间的定义 3&#xff09;std与命名空间的使用 4).相关特性 3. C输入&输出 4. 缺省参数 1 &#xff09;缺省参数概念 2&#xff09;使用及分类 a.全缺省 b.部分缺省 5. 函数…...

记录--在Vue3这样子写页面更快更高效

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 在开发管理后台过程中&#xff0c;一定会遇到不少了增删改查页面&#xff0c;而这些页面的逻辑大多都是相同的&#xff0c;如获取列表数据&#xff0c;分页&#xff0c;筛选功能这些基本功能。而…...

【程序设计与算法(三)】测验和作业题部分答案汇总(面向对象篇)

题目来源&#xff1a;程序设计与算法&#xff08;三&#xff09;测验和作业题汇总 文章目录001:简单的swap002:难一点的swap003:好怪异的返回值004:神秘的数组初始化005:编程填空&#xff1a;学生信息处理程序006:奇怪的类复制007:返回什么才好呢008:超简单的复数类009:哪来的输…...

LeetCode 349. 两个数组的交集和 692. 前K个高频单词

两个数组的交集 难度 简单 题目链接 这道题的难度不大&#xff0c;我们可以把数组里的数据存到set里面。这样就完成了排序和去重&#xff0c;然后我们再把一个set里面的数据和另外一个set数据进行比较。如果相同就插入到数组里。 代码如下&#xff1a; 但是这个算法的时间复…...

SpringCloud的五大组件功能

SpringCloud的五大组件 EurekaRibbonHystrixZuulConfig 一、Eureka 作用是实现服务治理&#xff0c;即服务注册与发现。 Eureka服务器相当于一个中介&#xff0c;负责管理、记录服务提供者的信息。服务调用者不需要自己寻找服务 &#xff0c;而是把需求告诉Eureka &#x…...

剑指 Offer II 016. 不含重复字符的最长子字符串

题目链接 剑指 Offer II 016. 不含重复字符的最长子字符串 mid 题目描述 给定一个字符串 s&#xff0c;请你找出其中不含有重复字符的 最长连续子字符串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子字符串是 “abc”&#xff0c;所以其长度…...

HBase读取流程详解

读流程从头到尾可以分为如下4个步骤&#xff1a;Client-Server读取交互逻辑&#xff0c;Server端Scan框架体系&#xff0c;过滤淘汰不符合查询条件的HFile&#xff0c;从HFile中读取待查找Key。其中Client-Server交互逻辑主要介绍HBase客户端在整个scan请求的过程中是如何与服务…...

Redis学习(一):NoSQL概述

为什么要使用Nosql 现在是大数据时代&#xff0c;过大的数据一般的数据库无法进行分析处理了。 单机MySQL的年代 90年代&#xff0c;一个基本的网站访问量一般不会太大&#xff0c;单个数据库完全足够&#xff01; 那个时候&#xff0c;更多的去使用静态网站&#xff0c;服务器…...

ESP32设备驱动-MCP23017并行IO扩展驱动

MCP23017并行IO扩展驱动 1、MCP23017介绍 MCP23017是一个用于 I2C 总线应用的 16 位通用并行 I/O 端口扩展器。 16 位 I/O 端口在功能上由两个 8 位端口(PORTA 和 PORTB)组成。 MCP23017 可配置为在 8 位或 16 位模式下工作。 其引脚排列如下: MCP23017 在 3.3v 下工作正常…...

RabbitMQ简介

0. 学习目标 能够说出什么是消息中间件能够安装RabbitMQ能够编写RabbitMQ的入门程序能够说出RabbitMQ的5种模式特征能够使用Spring整合RabbitMQ 1. 消息中间件概述 1.1. 什么是消息中间件 MQ全称为Message Queue&#xff0c;消息队列是应用程序和应用程序之间的通信方法。是…...

【项目设计】高并发内存池(五)[释放内存流程及调通]

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...