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,StringBuffer,StringBuilder的区别? 2.字符串拼接用加号的原理 ? 3.字符串常量池如何理解? 4.String的intern方法理解? 5.String的equals方法和compareTo方法的使用…...
Eureka注册中心和Nacos注册中心详解以及Nacos与Eureka有什么区别?
目录:前言Eureka注册中心Nacos注册中心Nacos与Eureka有什么区别?前言提供接口给其它微服务调用的微服务叫做服务提供者,而调用其它微服务提供的接口的微服务则是服务消费者。如果服务A调用了服务B,而服务B又调用了服务C࿰…...
Web3D发展趋势以及Web3D应用场景
1,Web3D发展趋势随着互联网的快速发展,Web3D技术也日渐成熟,未来发展趋势也值得关注。以下是Web3D未来发展趋势的七个方面:可视化和可交互性的增强:Web3D可以为三维数据提供可视化和可交互性的增强,将极大地…...
2023-3-4 刷题情况
按位与为零的三元组 题目描述 给你一个整数数组 nums ,返回其中 按位与三元组 的数目。 按位与三元组 是由下标 (i, j, k) 组成的三元组,并满足下述全部条件: 0 < i < nums.length 0 < j < nums.length 0 < k < nums.l…...
前端面试总结
1.引言 最近参加了大量的招聘会,投递了大量的简历,整整体会了从“随便找个厂上一下”——“还是的找个大厂”——“没人要”——“急了急了,海投一波”——“工资有点尬”——“海投中…”。简单说一下自己的一些感受吧,现在的前端属实有点尴…...
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 出现之前,我们要运行一个 Java Web 应用,首先需要有一个 Web 容器(例如 Tomcat 或 Jetty),然后将我们的 Web 应用打包后放到容器的相应目录下,最后再启动容器。 在 IDE 中也需要对 Web 容器…...
洛谷:P1554 梦中的统计 JAVA
思路:定义一个长度为10的数组,数组下标代表数组元素的数字,比如arr[0]代表数字0.用一个for循环,对每个数先取余再取整,知道取整得到的数为0,说明该数字已经被拆解完了。今天又学了一个输入,原来…...
C++初学笔记整理
目录 1. C关键字 2. 命名空间 1)命名空间的引入和概述 2)命名空间的定义 3)std与命名空间的使用 4).相关特性 3. C输入&输出 4. 缺省参数 1 )缺省参数概念 2)使用及分类 a.全缺省 b.部分缺省 5. 函数…...
记录--在Vue3这样子写页面更快更高效
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在开发管理后台过程中,一定会遇到不少了增删改查页面,而这些页面的逻辑大多都是相同的,如获取列表数据,分页,筛选功能这些基本功能。而…...
【程序设计与算法(三)】测验和作业题部分答案汇总(面向对象篇)
题目来源:程序设计与算法(三)测验和作业题汇总 文章目录001:简单的swap002:难一点的swap003:好怪异的返回值004:神秘的数组初始化005:编程填空:学生信息处理程序006:奇怪的类复制007:返回什么才好呢008:超简单的复数类009:哪来的输…...
LeetCode 349. 两个数组的交集和 692. 前K个高频单词
两个数组的交集 难度 简单 题目链接 这道题的难度不大,我们可以把数组里的数据存到set里面。这样就完成了排序和去重,然后我们再把一个set里面的数据和另外一个set数据进行比较。如果相同就插入到数组里。 代码如下: 但是这个算法的时间复…...
SpringCloud的五大组件功能
SpringCloud的五大组件 EurekaRibbonHystrixZuulConfig 一、Eureka 作用是实现服务治理,即服务注册与发现。 Eureka服务器相当于一个中介,负责管理、记录服务提供者的信息。服务调用者不需要自己寻找服务 ,而是把需求告诉Eureka &#x…...
剑指 Offer II 016. 不含重复字符的最长子字符串
题目链接 剑指 Offer II 016. 不含重复字符的最长子字符串 mid 题目描述 给定一个字符串 s,请你找出其中不含有重复字符的 最长连续子字符串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子字符串是 “abc”,所以其长度…...
HBase读取流程详解
读流程从头到尾可以分为如下4个步骤:Client-Server读取交互逻辑,Server端Scan框架体系,过滤淘汰不符合查询条件的HFile,从HFile中读取待查找Key。其中Client-Server交互逻辑主要介绍HBase客户端在整个scan请求的过程中是如何与服务…...
Redis学习(一):NoSQL概述
为什么要使用Nosql 现在是大数据时代,过大的数据一般的数据库无法进行分析处理了。 单机MySQL的年代 90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够! 那个时候,更多的去使用静态网站,服务器…...
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,消息队列是应用程序和应用程序之间的通信方法。是…...
【项目设计】高并发内存池(五)[释放内存流程及调通]
🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
