javaAPI(一):String
String的特性
String底层源码

1、String声明为final,不可被继承
2、String实现了Serializable接口:表示字符支持序列化
实现了Comparable接口:表示String可以比较大小
3、String内部定义了final char[] value用于存储字符串
4、通过字面量的方式给一个字符串赋值,此时的字符串值声明在字符串常量池中。
5、字符串常量池不会存储相同内容的字符串。
6、String:代表不可变的字符序列。简称:不可变性。
体现:
1.当对字符串重新定内存区域赋值,不能使用原有的value赋值。
2.当对现有的字符串连接操作时,也需要重新指定内存区域赋值,不能使用原有的value赋值。
3.当调用String的replace()修改字符或字符串时,也需要重新指定内存区域赋值。
String的实例化对比
方式一:通过字面量定义
String s1 = "abc";
方式二:通过new+构造器
String s2 = new String("abc");
两种方式的区别
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2);//false
解析:
s1存储的是常量池中abc的地址值。
s2存储的是堆中String对象的地址值,此对象存储的才是常量池中abc的地址值。
字符串对象是如何存储的
Person p1 = new Person("Tom",12);
Person p2 = new Person("Tom",12);System.out.println(p1.name == p2.name);//true
解析:
通过字面定义的String都定义在常量池中,p1,name,p2.name地址值指向的是同一个name,同一个地址,所以是true。
Sting拼接操作对比
结论
1、常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
2、只要其中一个是变量,结果就在堆中。
3、如果拼接的结果调用inter(),返回值就在常量池中。
String s1 = "abc";String s2 = "123";String s3 = "abc123";String s4 = "abc" + "123";String s5 = s1 + "123";String s6 = "abc" + s2;String s7 = s1 + s2;System.out.println(s3 == s4);//trueSystem.out.println(s3 == s5);//falseSystem.out.println(s3 == s6);//falseSystem.out.println(s3 == s7);//falseSystem.out.println(s5 == s6);//falseSystem.out.println(s5 == s7);//falseSystem.out.println(s6 == s7);//falseString s8 = s5.intern();System.out.println(s3 == s8);//truefinal String s9 = "abc";//final修饰,此为常量。String s10 = s9 + "123";System.out.println(s3 == s10);//true
String的常用方法
| int length() | 返回字符串的长度:return value.length |
| char charAt(int index) | 返回索引处的字符return value[index] |
| boolean isEmpty() | 判断是否是空字符串:return value.length == 0 |
| String toLowerCase() | 使用默认语言环境,将String中的所有字符转换为小写 |
| String toUpperCase() | 使用默认语言环境,将String中的所有字符转换为大写 |
| String trim | 返回字符串的副本,忽略前导空白和尾部空白 |
| String equals(Object obj) | 比较字符串内容是否相同 |
| boolean equalslgnoreCase(String anotherString) | 与equals方法类似,忽略大小写 |
| String concat(String str) | 将指定字符串连接导此字符串的结尾。等价于用"+" |
| int compareTo(String anotherString) | 比较两个字符串的大小 |
| String substring(int beginIndex) | 返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串 |
| String substring(int beginIndex,int endIndex) | 返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串 |
| boolean endsWith(String suffix) | 测试此字符串是否一指定的后缀结束 |
| boolean startsWith(String prefix) | 测试此字符串是否一指定的前缀开始 |
| boolean startsWith(String prefix,int toffset) | 测试此字符串从指定索引开始的子字符串是否一指定前缀开始 |
| boolean contains(CharSequence s) | 当且仅当此字符串包含指定的char值序列时,返回true |
| int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引 |
| int indexOf(String str,int fromIndex) | 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始 |
| int lastIndexOf(String str) | 返回指定子字符串中最右边出现处的索引 |
| int lastIndexOf(String str,int fromIndex) | 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索 |
| String replace(char oldChar,char newChar) | 返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的 |
| String replace(CharSequence target,CharSequence replacement) | 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串 |
| String replaceAll(String regex,String replacement) | 使用给定的replacement 替换此字符串所有匹配给定的正则表达式的子字符串 |
| String replaceFirst(String regex,String replacement) | 使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串 |
| boolean matches(String regex) | 告知此字符串是否匹配给定的正则表达式 |
| String[] split(String regex) | 根据给定正则表达式的匹配拆分此字符串 |
| String[] split(String regex,int limit) | 根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中 |
String与其他结构之间的转换
String与基本数据类型、包装类之间的转换
String——>基本数据类型、包装类
调用包装类的静态方法:parseXxx(str)
String str1 = "123";
int num = Integer.parseInt(str1);
基本数据类型、包装类——>String
调用String重载的valueOf(xxx)
String str2 = String.valueOf(num);
String与char[]之间的转换
String——>char[]:
调用String的toCharArray()
String str1 = "abc123";
char[] charArray = str1.toCharArray();
char[]——>String:
调用String的构造器
char[] arr = new arr[]{'h','e','l','l','o'};
String str2 = new String(arr);
String与byte[]之间的转换
String——>byte[] (编码,字符串–>字节):
调用String的getBytes()
String str1 = "abc123中国";
byte[] bytes = str1.getBytes();//使用默认字符即,进行转换
System.out.println(Arrays.toString(bytes));
byte[] gbks = str1.getBytes("gbk");//使用gbk字符集进行编码
System.out.println(Arrays.toString(gbks));
byte[]——>String(解码,字节–>字符串):
调用String构造器
String str2 = new String (bytes);//使用默认字符集,进行解码
System.out.println(str2);
String str3 = new String(gbks);
System.out.println(str2);//出现乱码
//原因:编码字符集时UTF-8,解码字符集时GBK。编码解码需要相同。
相关文章:
javaAPI(一):String
String的特性 String底层源码 1、String声明为final,不可被继承 2、String实现了Serializable接口:表示字符支持序列化 实现了Comparable接口:表示String可以比较大小 3、String内部定义了final char[] value用于存储字符串 4、通过字面量的…...
数据互通,版本管理优化图文档与BOM数据
在现代企业的产品开发过程中,图文档和BOM数据是不可或缺的关键要素。图文档记录了产品的设计和工程信息,而BOM数据则明确了产品所需物料的清单和规格。然而,由于数据的复杂性和版本变更的频繁性,图文档与BOM数据之间的协作和管理常…...
【CSS】旋转中的视差效果
效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…...
【ASP.NET MVC】使用动软(一)(9)
一、解决的问题 前文为解决数据库操作设计的 TestMysql 类,仅简单地封装了一个Query函数,代码如下: public class TestMysql{public static string SqlserverConnectStr "server127.0.0.1;charsetutf8;user idroot;persistsecurityin…...
【Jsp课设】3款基于JavaWeb的学生选课管理系统
项目介绍:后端采用JspServlet。前端使用的是Layui的一个网站模板。开发一个在线的学生选课管理系统,用于课程设计的使用。 项目类型:JavaWeb源码 用户类型:2个角色(管理员学生) 主要技术:JspSe…...
系统架构设计师笔记第35期:表现层框架设计
表现层框架设计是指在软件系统中,将用户界面(UI)和用户交互逻辑与后端业务逻辑分离,使用特定的框架来组织和管理表现层的功能和结构。下面是表现层框架设计的一般步骤和常用技术: 确定需求和功能:首先&…...
力扣 -- 467. 环绕字符串中唯一的子字符串
一、题目 二、解题步骤 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:int findSubstringInWraproundString(string s) {int ns.size();vector<int> dp(n,1);int re…...
Hi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs
目录 Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfsHi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs 关于 Debian rootfs Debian 没有像 Ubuntu 提供 Ubuntu-…...
面试热题(字符串相加)
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 输入:num1 "11"…...
我的创作纪念日【第一个2048day】
机缘 初心:研究生期间,帮老师做一个项目,过程中学习的东西想记录下来,于是,就选择了CADN让技术分享成为工作的一部分 收获 获得了1800多粉丝的关注获得了63万的访问量,其中《C#设计模式》专栏深受大家喜欢…...
内网穿透-————SSH远程连接树莓派
前言 文章目录 前言内网穿透实现公网SSH远程连接树莓派1. 在树莓派上安装[cpolar客户端](https://www.cpolar.com/)2. 在树莓派浏览器中输入本地9200端口3. 在公共互联网的电脑的命令行界面输入命令 内网穿透实现公网SSH远程连接树莓派 随着科技的进步和信息技术的发展&#x…...
一键开启ChatGPT“危险发言”
大数据文摘授权转载自学术头条 作者:Hazel Yan 编辑:佩奇 随着大模型技术的普及,AI 聊天机器人已成为社交娱乐、客户服务和教育辅助的常见工具之一。 然而,不安全的 AI 聊天机器人可能会被部分人用于传播虚假信息、操纵舆…...
RISC-V基础之函数调用(一)简单的函数调用(包含实例)
高级语言支持函数(也称为过程或子程序)来重用通用的代码,以及使程序更加模块化和可读。函数可以有输入,称为参数,和输出,称为返回值。函数应该计算返回值,并且不产生其他意外的副作用。 在一个…...
apt、aptitude、apt-get/apt-cache语法的区别
apt句法 aptitude句法 apt-get/apt-cache语法 描述 apt update aptitude update apt-get update 更新包存档元数据 apt install foo ap...
华为认证 | HCIA和HCIP有啥区别?
HCIA和HCIP都是华为认证体系里的,所以它们的考试流程大同小异,唯一区别的话,那可能就是课程内容方面的区别较大了。 那么HCIA和HCIP考试有啥区别呢?下面我们就来跟随小编来了解一下吧。 01 HCIA和HCIP考试有啥区别 ★ 等级不同 …...
JavaScript基础知识
JavaScript基础知识 一、变量与数据类型1. 变量2. 数据类型 二、表达式与运算符1.字面量2.表达式3.运算符3.1 算术运算符3.2 比较运算符3.3 逻辑运算符3.4 赋值运算符 三、条件语句1. 控制流程2. 语句块3. if 语句3. switch 语句4. 条件运算符 四、循环语句1. while2. do...whi…...
vue2 todoapp案例(静态)
1.创建三个子组件(TodoHeader、TodoMain、TodoFooter)和两个(index.css、base.css)样式; TodoHeader页面 <template><header class"header"><h1>todos</h1><input id"toggle-all" class"toggle-all" typ…...
qt5.14 和 qt5.15的区别
Qt 5.14 和 Qt 5.15 是两个不同的 Qt 版本,它们之间有一些区别和改进。 以下是一些 Qt 5.15 相对于 Qt 5.14 的变化和改进: 性能改进:Qt 5.15 引入了一些性能改进,包括提高渲染性能和减少内存占用。 Qt 3D:Qt 5.15 对…...
如何使用自己域名进行远程访问内网群晖NAS 6.X
使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中,我们向大家演示了如何使用cpolar,创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…...
PHP判处重复延长队列执行时间
需求是这样: 14:00的时候,需要给1000个门店执行发券操作,有的门店需要发3个场景,开放平台的接口有请求频次限制,他是按照门店的场景发券需要间隔10秒。比如说,AB两个门店同时发a券,但不能 A门店…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...


