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学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...