java String类 万字详解(通俗易懂)
目录
一、前言
二、介绍和溯源
三、String类常用构造器
1.String()
2.String(byte[] bytes)
3.String(char[] value)
4.String(char[] value, int offset, int count)
5.String(String original)
Δ演示 :
四、不同方式创建String类对象的区别
1.直接赋值的方式
2.常规new的方式
3.内容延申
五、String类常用成员方法
0.前言 :
1.判断功能的方法 :
①boolean equals(Object anObject)
②boolean equalsIngoreCase(String anotherString)
③boolean startWith(String prefix)
④boolean isEmpty()
演示 :
2.获取功能的方法 :
①int length()
②char charAt(int index)
③int indexOf(String str)
④int indexOf(String str, int t)
⑤int lastIndexOf(String str)
⑥int compareTo(String anotherString)
⑦String substring(int beginIndex)
⑧String substring(int beginIndex, int endIndex)
演示 :
3.转换功能的方法 :
①byte[] getByte()
②char[] toCharArray()
③static String valueOf(...)
④String replace(String old, String new)
⑤String[] split(String regex)
⑥String trim()
⑦String concat(String str)
⑧String toUpperCase()
⑨String toLowerCase()
⑩static String format(String format, Object... args)
演示 :
六、String类总结
一、前言
本节内容是我们《API-常用类》专题的第二小节了。本节内容主要讲String类, 内容包括但不限于 String介绍和溯源 , String类的类图 , String类的构造器 ,不同方式创建String类对象的区别,以及String类常用方法的演示。up希望通过这篇博文的知识分享,能够帮助大家快速上手并理解java String类。 注意 : ① 代码中的注释也很重要; ② 不要眼高手低,自己敲一遍才能知道怎么用。 ③ 点击侧边栏目录或者文章开头的目录可以跳转。良工不示人以朴,所有文章都会适时改进。大家如果有什么问题,都可以在评论区一块儿交流,或者私信up。 感谢阅读!
二、介绍和溯源
字符串是一组用双引号括起来的字符序列,eg : "CSDN","Cyan","RA9"等等。每一个字符串对象都是常量。字符串中的字符使用unicode编码,一个字符(不区分中英文)均占两个字节。java中用String类描述字符串,如下图所示 :
可以看到,String类用final关键字修饰,因此String类是不可被其他类继承的;并且,通过String类中的属性value及其源码描述,我们可以得知String类的底层实际仍是字符数组byte[]。也就是说,new出的String对象在堆空间中,该对象的空间里有value属性,用于存放字符串的内容(实际是指向常量池的地址)。同时,该value数组也使用了final关键字修饰,我们在面向对象专题详解过final关键字,当final关键字修饰引用类型时,不可更改其引用的指向,即不能更改其保存的地址值。
接下来我们再来看看String类的“家庭关系图”。首先,String类属于java.base模块,java.lang包下,并且实现了Serializable,Comparable等接口。如下图所示 :
我们再来看看String类的类图,如下 :
可以看到,String类除了继承自Object类之外,还实现了许多接口。这么多接口中,大家只需要记住关键的两个接口——①Serializable接口,实现该接口使得String类型可串行化,串行化后,String类型可以进行网络传输。②Comparable接口,实现该接口使得String类型可以进行“比较”的操作。
三、String类常用构造器
String类的构造器非常多,如下图所示 :
有些还是过时的。当然,我们就挑几个重点的,常见的构造器给大家演示一下即可。
1.String()
该构造器可以初始化一个String对象,使其指向一个空字符序列。
2.String(byte[] bytes)
该构造器可以初始化一个String对象,并将指定字节数组中的数据转化成字符串。
3.String(char[] value)
该构造器可以初始化一个String对象,并将指定字符数组中的数据转化成字符串。
4.String(char[] value, int offset, int count)
该构造器可以初始化一个String对象,并将指定字符数组中的指定数据转化成字符串。
5.String(String original)
该构造器可以初始化一个String对象,使该对象实际指向的字符串常量与传入的字符串形参相同,相当于是形参的一份拷贝。
Δ演示 :
以String_Constructors为演示类,代码如下 :
package csdn.knowledge.api.string;public class String_Constructors {public static void main(String[] args) {//演示 : String类的常用构造器//1 —— String()String str_0 = new String();System.out.println(str_0);System.out.println("--------------------");//2 —— String(byte[] bytes)byte[] bytes = {65, 66, 67, 68}; //65~68对应ASCII码表A~DString str_1 = new String(bytes);System.out.println(str_1);System.out.println("--------------------");//3 —— String(char[] value)char[] value = {'C', 'y', 'a', 'n', '_', 'R', 'A', '9'};String str_2 = new String(value);System.out.println(str_2);System.out.println("--------------------");//4 —— String(char[] value, int offset, int count)String str_3 = new String(value, 0, 4);System.out.println(str_3);System.out.println("--------------------");//5 —— String(String original)String str_4 = new String("CSDN yyds!");System.out.println(str_4);}
}
运行结果 :
四、不同方式创建String类对象的区别
1.直接赋值的方式
String类在实际开发中的使用场景非常多,java在底层提供了针对String类的优化,即可以不通过构造器来创建String对象。而是直接赋值一个字符串。
eg : String str_0 = "Cyan"; ,使用这种方式来创建String对象,jvm会先从常量池中查看是否有"Cyan"字符串的数据空间,若有,令引用变量直接指向该空间;若无,重写创建"Cyan"的数据空间并令其引用变量指向它。因此,str_0引用最终直接指向的是常量池中"Cyan"常量的空间地址。
内存图如下所示 :
2.常规new的方式
eg : String str_1 = new String("Cyan"); ,使用这种方式来创建String对象,jvm会先在堆空间中给String对象开辟空间,这片空间中维护了value数组这一属性,该属性指向常量池的"Cyan"数据空间。若常量池中没有"Cyan",则重写创建"Cyan"数据空间,并让value引用指向该数据空间。最后,将该对象堆空间的地址值返回给str_1引用。因此,str_1引用最终直接指向的是堆中的空间地址。
内存图如下所示 :
3.内容延申
若使用字符串拼接的方式来创建字符串对象,如下 :
eg : String str_0 = "Cyan" + "RA9";
当我们以两个字符串拼接的形式来创建字符串对象时,jvm不会在常量池中分别创建"Cyan"字符串常量和"RA9"字符串常量,再把它们拼接起来。而是直接在底层优化,先把两个字符串拼接起来,之后直接去常量池中寻找有没有拼接起来的这个字符串常量,如果有,直接令该引用指向这个字符串常量的空间地址;如果没有则先创建该字符串常量,再让引用指向这里。当然,我们已经学过了Debug,此时我们就可以直接通过Debug来验证我们的结论,如下图所示 :
五、String类常用成员方法
0.前言 :
在IDEA类图中我们可以查看String类中的方法,如下GIF图所示 :
😂可以看到,String类中的方法真是多得⑧彳亍!不过你放心,up从这些方法中挑选了一些我们经常用到的方法,并根据它们的功能将其分为了“判断功能”,“获取功能”,以及“转化功能”三部分。如此一来,大家就可以放心食用🌶!
1.判断功能的方法 :
①boolean equals(Object anObject)
该方法可以判断当前字符串与指定对象的内容是否相同,实际在底层比较的就是字符串的内容,会区分大小写。
②boolean equalsIngoreCase(String anotherString)
该方法可以判断当前字符串与给定字符串的内容是否相同,不区分大小写。
③boolean startWith(String prefix)
该方法可以判断当前字符串是否以给定字符串开头。
④boolean isEmpty()
该方法可以判断当前字符串是否为空。
演示 :
以String_methods类为演示类,代码如下 :
package csdn.knowledge.api.string;public class String_methods {public static void main(String[] args) {//演示 : String常用方法之判断功能的方法//1 —— boolean equals(Object anObject)String str_0 = "cyan";System.out.println("\"Cyan\"字符串与str_0字符串的内容相等吗?" + "Cyan".equals(str_0));System.out.println("================");//2 —— boolean equalsIgnoreCase(String anotherString)System.out.println("\"Cyan\"字符串与str_0字符串的内容相等吗?" + "Cyan".equalsIgnoreCase(str_0));System.out.println("================");//3 —— boolean startWith(String prefix)System.out.println("str_0字符串是否以\"cy\"开头?" + str_0.startsWith("cy"));System.out.println("str_0字符串是否以\"Cy\"开头?" + str_0.startsWith("Cy"));System.out.println("================");//4 —— boolean isEmpty()System.out.println("str_0字符串是否为空?" + str_0.isEmpty());}
}
运行结果 :
2.获取功能的方法 :
①int length()
获取当前字符串的长度。
②char charAt(int index)
获取指定位置索引的字符(指字符串的指定索引)。
③int indexOf(String str)
获取指定字符(串) 第一次出现的索引,默认从第0位开始。若返回-1,则表示没有该字符(串)。
④int indexOf(String str, int t)
功能与上一次方法相同,但默认从字符串索引第 t 位开始找。
⑤int lastIndexOf(String str)
获取指定字符(串)最后一次出现的索引,若没有,返回-1。
⑥int compareTo(String anotherString)
返回两个字符串对象的比较结果——若相等,返回0;若不相等,从两个字符串的第一个字符开始比较,返回第一个不相等的字符的ASCII码差值。当较长字符串的前面部分恰巧是较短的字符串时,返回两个字符串的长度差。
⑦String substring(int beginIndex)
获取指定索引位置(包含该位置) 之后的字符串。
⑧String substring(int beginIndex, int endIndex)
获取从索引beginIndex开始,到索引endIndex之间的字符串(区间为前闭后开)。
演示 :
以String_methods_2类为演示类,代码如下 :
package csdn.knowledge.api.string;public class String_methods_2 {public static void main(String[] args) {//演示 : String常用方法之获取功能的方法//1 —— int length()String str_0 = "We are the best.";System.out.println("当前字符串str_0 : " + str_0);int length = str_0.length();System.out.println("str_0字符串的长度为:" + length);System.out.println("========================");//2 —— char charAt(int index)char ch_0 = str_0.charAt(0);char ch_1 = str_0.charAt(5);System.out.println("str_0字符串中,索引为0的字符是:" + ch_0);System.out.println("str_0字符串中,索引为5的字符是:" + ch_1);System.out.println("========================");//3 —— int indexOf(String str)int i_0 = str_0.indexOf('e');System.out.println("字符\'e\'在字符串str_0中首次出现时的索引为:" + i_0);int i_2 = str_0.indexOf("are");System.out.println("字符串\"are\"在字符串str_0中首次出现时的索引为:" + i_2);System.out.println("========================");//4 —— int indexOf(String str, int t)int i_1 = str_0.indexOf('e', 7);System.out.println("从字符串str_0索引为7的地方开始找,字符\'e\'在字符串str_0中首次出现时的索引为:" + i_1);System.out.println("========================");//5 —— int lastIndexOf(String str)int i_3 = str_0.lastIndexOf('t');System.out.println("字符\'t\'在字符串str_0中最后一次出现时的索引为:" + i_3);System.out.println("========================");//6 —— int compareTo(String anotherString)//第一种情况 : 俩字符串相同int i_4 = str_0.compareTo("We are the best.");System.out.println("compareTo方法返回0说明俩字符串相等: " + i_4);//第二种情况 : 俩字符串长度相同,内容不同int i_5 = str_0.compareTo("You are so good."); //W : 77, Y : 79.System.out.println("\'W\'和\'Y\'的ASCII码差值为:" + i_5);//第三种情况 : 俩字符串长度不相同,但长的字符串的前一部分与短的字符串相同。int i_6 = str_0.compareTo("We are the best.we are the king!");int i_7 = "We are the best.we are the king!".compareTo(str_0);System.out.println("str_0字符串与传入字符串的长度差值为:" + i_6);System.out.println("传入字符串与str_0字符串的长度差值为:" + i_6);System.out.println("========================");//7 —— String substring(int beginIndex)String str_1 = str_0.substring(11); //"best."System.out.println("str_0字符串中,从索引11开始到结束的字符串为:" + str_1);System.out.println("========================");//8 —— String substring(int beginIndex, int endIndex)String str_2 = str_0.substring(7, 10); //[7,10)——注意区间的格式。System.out.println("str_0字符串中,从索引7到10(不包括10)的字符串为:" + str_2);}
}
运行结果 :
3.转换功能的方法 :
①byte[] getByte()
将字符串转换成字节数组。(ASCII码)。
②char[] toCharArray()
将字符串转换成字符数组。
③static String valueOf(...)
将指定类型数据转换成字符串。
④String replace(String old, String new)
将指定字符(串)替换为新的字符(串)。原字符串不受影响。
⑤String[] split(String regex)
以传入的字符(串)为标准来切割原字符串,返回切割后的字符串数据,以String类型的数组作为接收。原字符串不受影响。
⑥String trim()
去掉字符串两端的空白字符。(eg : 对登录账号和密码的处理)。
⑦String concat(String str)
将传入的字符串拼接到当前字符串的末尾。
⑧String toUpperCase()
将当前字符串全部转换成大写后返回。
⑨String toLowerCase()
将当前字符串全部转换成小写后返回。
⑩static String format(String format, Object... args)
将指定参数以指定的输出控制格式来输出。形参“String format部分”即输出格式控制,是包含占位符的String类型。形参“Object... args”部分即要输出的参数。占位符由后面的参数按照顺序来一一替换。
至于什么是占位符,比如 : "%s", "%d", "%f"这些,就是C语言中的printf语句用的那几个,这里不再赘述。
演示 :
以String_methods_3类为演示类,代码如下 :
package csdn.knowledge.api.string;public class String_methods_3 {public static void main(String[] args) {//演示 : String常用方法之转换功能的方法//1 —— byte[] getByte()String str_0 = "ABCD"; //A~D对应ASCII码值 = 65~68byte[] bytes = str_0.getBytes();for (int i = 0; i < bytes.length; i++) {System.out.println("字节数组的第" + (i + 1) + "个元素 = " + bytes[i]);}System.out.println("-----------------------");//2 —— char[] toCharArray()char[] chars = str_0.toCharArray();for (int i = 0; i < chars.length; i++) {System.out.println("字符数组的第" + (i + 1) + "个元素 = " + chars[i]);}System.out.println("-----------------------");//3 —— static String valueOf(...)String str_1 = String.valueOf(1111);String str_2 = String.valueOf('h');String str_3 = String.valueOf(123.6666);System.out.println("int类型转String类型:" + str_1);System.out.println("char类型转String类型:" + str_2);System.out.println("double类型转String类型:" + str_3);System.out.println("-----------------------");//4 —— String replace(String old, String new)String str_4 = "You_are_so_beautiful!";String str_5 = str_4.replace('_', ' '); //以' '替换掉'_'System.out.println("原字符串:" + str_4);System.out.println("新字符串:" + str_5);System.out.println("-----------------------");//5 —— String[] split(String regex)String str_6 = "What hahaa hahacoincidence haha!";String[] strings = str_6.split("haha"); //以"haha"来切割字符串。for (String string : strings) {System.out.print(string);}System.out.println("\n-----------------------");//6 —— String trim()String str_7 = " hey,man! ";String str_8 = str_7.trim();System.out.println("去掉两端空白字符前的字符串:" + str_7);System.out.println("去掉两端空白字符后的字符串:" + str_8);System.out.println("-----------------------");//7 —— String concat(String str)String str_9 = "I ";String str_10 = str_9.concat("love ").concat("programming!");System.out.println("拼接后的字符串str_10 = " + str_10);System.out.println("-----------------------");//8 —— String toUpperCase()String str_11 = "i love you!";System.out.println("大写之前的字符串:" + str_11);System.out.println("大写之后的字符串:" + str_11.toUpperCase());System.out.println("-----------------------");//9 —— String toLowerCase()System.out.println("小写之前的字符串:" + str_11.toUpperCase());System.out.println("小写之后的字符串:" + str_11.toUpperCase().toLowerCase());System.out.println("-----------------------");//10 —— static String format(String format, Object... args)String name = "Cyan";int age = 21;String hobby = "programming!";String sss = String.format("My name is %s, and I'm %d years old, my hobby is %s", name, age, hobby);System.out.println(sss);}
}
运行结果 :
六、String类总结
🆗,以上就是关于String类的全部内容了。希望这篇博文的内容分享,可以帮助大家对String类有进一步的认识。同时,关于String类的常用方法,up都做了较为详细的演示和批注,大家可以多回来看看😆。API专题的下一小节,我们来讲讲常用类StringBuilder和StringBuffer类,不见不散。感谢阅读!
相关文章:

java String类 万字详解(通俗易懂)
目录 一、前言 二、介绍和溯源 三、String类常用构造器 1.String() 2.String(byte[] bytes) 3.String(char[] value) 4.String(char[] value, int offset, int count) 5.String(String original) Δ演示 : 四、不同方式创建String类对象的区别 1.直接赋值的方式 2.常规new…...

Hive拉链表
概述 拉链表:维护历史状态以及最新状态数据的表 作用场景 1. 数据量比较大。 2. 表中的部分字段会被更新,比如用户的地址,银行利率,订单的状态等。 3. 需要查看某一个时间点或者时间段的历史快照信息,比如,…...
day1 开发我的第一个MyBatis程序
文章目录开发我的第一个MyBatis程序1. resources目录:2. 开发步骤3. 从 XML 中构建 SqlSessionFactoryMyBatisIntroductionTest4. mybatis中有两个主要的配置文件:5. 关于第一个程序的小细节mybatis-config.xml6. 关于mybatis的事务管理机制。࿰…...

【CDP】更改solr 存储路径导致ranger-audit 大量报错问题解决
前言 我们生产上公司是使用的CDP集群,一次管理员通知,Solr 组件的数据存放路径磁盘空间不够。 我们的solr 组件时为 Ranger 服务提供日志审计功能, 在我们更改了磁盘路径,并重启了Solr 组件,然后发现相关组件&#…...

JavaScript基础一、简介
零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…...

Qt音视频开发20-vlc内核动态保存录像文件(不需要重新编译源码)
一、前言 在vlc默认提供的保存文件方式中,通过打开的时候传入指定的参数来保存文件,直到关闭播放生成文件,这种方式简单暴力,但是不适用大部分的场景,大部分时候需要的是提供开始录制和停止录制的功能,也就…...

【深度学习】BERT变体—RoBERTa
RoBERTa是的BERT的常用变体,出自Facebook的RoBERTa: A Robustly Optimized BERT Pretraining Approach。来自Facebook的作者根据BERT训练不足的缺点提出了更有效的预训练方法,并发布了具有更强鲁棒性的BERT:RoBERTa。 RoBERTa通过以下四个方面…...
java面试准备1
JVM、JRE和JDK的关系 JVM:Java Virtual Machine是java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此java可以实现跨平台使用。 JRE:Java Runtion Envirement包括Java虚拟机和Java程序所需要的核心类库等。 J…...

buffer它到底做了个啥,源码级分析linux内核的文件系统的缓冲区
最近一直在学习linux内核源码,总结一下 https://github.com/xiaozhang8tuo/linux-kernel-0.11 自己整理过的带注释的源码。 为什么要有buffer 高速缓冲区是文件系统访问块设备中数据的必经要道(PS:如果所有程序结果都不落盘,只是int a, a直接在主存…...

【蓝桥杯刷题】盗版Huybery系列之手抓饼赛马
【蓝桥杯刷题】—— 盗版Huybery系列之手抓饼赛马😎😎😎 目录 💡前言🌞: 💛盗版Huybery系列之手抓饼赛马题目💛 💪 解题思路的分享💪 😊题…...

【微信小程序-原生开发】实用教程16 - 查看详情(含页面跳转的传参方法--简单传参 vs 复杂传参)
需在实现列表的基础上开发 【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)_朝阳39的博客-CSDN博客 https://sunshinehu.blog.csdn.net/article/details/129356909 效果预览 …...

论文精读:Ansor: Generating High-Performance Tensor Programs for Deep Learning
文章目录1. Abstract2. Introduction3. Background4. Design Overview5. Program Sampling5.1 Sketch Generation5.2 Random Annotation6. Performance Fine-tuning6.1 Evolutionary Search6.2 Learned Cost Model7. Task Scheduler7.1 Problem Formulation7.2 Optimizing with…...

SpringBoot With IoC,DI, AOP,自动配置
文章目录1 IoC(Inverse Of Controller)2 DI(Dependency Injection)3 AOP(面向切面编程)3.1 什么是AOP?3.2 AOP的作用?3.3 AOP的核心概念3.4 AOP常见通知类型3.5 切入点表达式4 自动配…...

ggplot2的组图拓展包(1):patchwork(上篇)
专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集patchwork是ggplot绘图系统的拓展包,主要功能是将多个ggplot格式的图形组合成一幅大图,即组图。patchwork工具包十分好用,它主要利用几个类似四则运算符号的操作符进行组图&…...
Python 异步: 异步迭代器(15)
动动发财的小手,点个赞吧! 迭代是 Python 中的基本操作。我们可以迭代列表、字符串和所有其他结构。 Asyncio 允许我们开发异步迭代器。我们可以通过定义一个实现 aiter() 和 anext() 方法的对象来在 asyncio 程序中创建和使用异步迭代器。 1. 什么是异步…...

HD-G2L-IOT V2.0核心板MPU压力测试
1. 测试对象HD-G2L-IOT基于HD-G2L-CORE V2.0工业级核心板设计,双路千兆网口、双路CAN-bus、2路RS-232、2路RS-485、DSI、LCD、4G/5G、WiFi、CSI摄像头接口等,接口丰富,适用于工业现场应用需求,亦方便用户评估核心板及CPU的性能。H…...
scikit-image:遥感图像geotiff格式转mat格式
scikit-imagescikit-image 是一个专门用于图像处理的 Python 库,它可以与 Scipy 库和其他可能有助于计算的 Python 库一起使用。Github地址:https://github.com/scikit-image/scikit-image Star有5.3k首先pip安装scikit-image包,或者直接使用…...

吉利银河L7、长城哈弗B07、比亚迪宋Plus DM-i,自主品牌决战混动
2月23日,吉利推出全新的中高端新能源产品序列——吉利银河。当日,吉利推出了首款智能电混SUV「银河L7」,新车将在二季度交付。本月10日,长城汽车也计划举办智能新能源干货大会,其「颠覆技术」等宣传直面新一代的新能源…...
附录3:说一说 Ambari 视图编译相关
一、Ambari View Ambari 视图,即 Ambari Views 。其实 Ambari 视图并不是很好用,所以大部分人很自然地就把 Ambari 视图给忽略了,心里会冒出一句:“还有这东西?”。然而作为 Ambari 的一部分,今天还是要讲一下,万一有人追求 Ambari 完整性,要编译并安装汉化他们呢? …...

Arduino双色LED实验记录
接线图片:双色LED实物和布线有区别:代码:int RED_LED 11; //设置红色为11 int GREEN_LED 10; //设置绿色为10 int val 0;//全局变量val void setup() {// put your setup code here, to run once:pinMode(RED_LED,OUTPUT);//引脚配置pinMo…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...