测试开发基础 | 一文搞定常用 API 之 String 类
String ,无论对开发还是测试人员,都是 Java 语言中使用最为频繁的技术点,也是测试开发面试中常见的考查重点。本文就来重点学习
String 类的相关知识。
1、什么是 String 类
我们打开 JDK 的 API 文档可以看到如下解释:
从API文档中我们得到如此下几个主要信息:
-
String
类位于java.lang
包下,代表字符串 -
Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例;意思就是就算没有new对象,只要用双引号括起来的字符串就是类
String
的对象 -
字符串是常量,创建之后不可更改
-
因为字符串不可变,所以可以被共享使用
-
字符串在效果上相当于是char[]数组,但是底层原理是byte[]字节数组
-
创建String对象实际上相当于如下两步:
@Test
public void stringTest(){
char[] data = {'1','B'}; //1.先创建一个char类型的数组
String str = new String(data); //再new一个String对象
System.out.println(str); //打印String对象
}//得到结果如下
1B
2、字符串的创建
2.1 构造方法
查看 String 的构造方法发现有很多:
平常也没觉得String有多难啊,怎么这么多构造方法,别慌~
仔细看文档的内容发现有很多方法注明了“已弃用”,也就是说已经过时了,现在不用了,有更好的方法可以替代。
那么问题又来了,既然已经弃用了还放在这里干嘛,显得啰嗦。其实这是因为很多老的项目可能用的是老版本的,为了保证这些项目的运行不受影响,依然不能直接将它们删除。
可以重点记住我们常用的 4 种字符串创建方式,其余的用到时候再查文档也不迟。
2.2 创建对象
-
空参构造创建-
public String(){}
@Test
public void stringTest1(){
String str1 = new String();
System.out.println("空参构造创建" + str1);
}//测试结果
空参构造创建 -
根据字符数组创建-
public String(char[] array)
@Test
public void stringTest2(){
char[] chars = {'a','b','c'};
String str2 = new String(chars);
System.out.println("字符数组创建" + str2);
}//测试结果
字符数组创建abc -
根据字节数组创建-
public String(byte[] array)
@Test
public void stringTest3(){
byte[] bytes = { 97, 98, 99 };
String str3 = new String(bytes);
System.out.println("字节数组创建" + str3);
}//测试结果
字节数组创建abc
在这里稍微停一哈,我们从测试结果中可以看到用字节数组创建的结果打印出来后和字符数组创建打印的结果一样,这是因为根据ASCII编码表发现,字节数97,98,99分别就对应代表了a,b,c
-
直接创建-
String
:这种也是我们最常用最简单的一种方式.@Test
public void stringTest4(){
String str4 = "hello tester!";
System.out.println(str4);
}//测试结果
hello tester!
3、字符串的使用
3.1 字符串的比较
3.1.1 ==比较
-
如下比较3个字符串内容均为"abc"的字符串:
@Test
public void stringTest(){
String str1 = "abc";
String str2 = "abc";char[] charArray = {'a','b','c'}; String str3 = new String(charArray); System.out.println(str1 == str2); System.out.println(str1 == str3); System.out.println(str3 == str2);
}
//测试结果
true
false
false
从结果中看到str1和str2的比较相等,其余均为false,这是为什么呢?
因为对于引用类型来说,==
进行的是地址值的比较;且双引号直接写的字符串在常量池中,new的不在池当中。参考如下内存图:
3.1.2 equals比较
在String的方法中有这样一个方法,API文档描述如下:
大概的意思就是说:仅当参数是一个字符串且内容完全相同才返回true,否则就返回false;
-
接着我们运行如下测试代码:
@Test
public void stringTest(){
String str1 = "abc";
String str2 = "abc";char[] charArray = {'a','b','c'}; String str3 = new String(charArray); System.out.println(str1.equals(str2)); System.out.println(str1.equals(str3)); System.out.println(str3.equals(str2)); System.out.println("abc".equals(str1)); //推荐写法 System.out.println(str3.equals("abc")); //不推荐写法,若对象为null就会报空指针异常
}
//测试结果
true
true
true
true
true
这个时候从测试结果中我们可以看到只要内容相同就返回了true。
- 另外在上面的方法截图最下方,我们还看到了一个方法
equalsIgnoreCase(String)
,这个方法也是很常用的一个比较方法,可以忽略英文字母的大小写;
实例演示:
@Test
public void stringTest(){
String a = "tester";
String b = "TestER";
System.out.println(a.equalsIgnoreCase(b));
}
//测试结果
true
3.2 字符串其他常用方法
- 3.2.1 字符串获取
方法 | 作用 |
---|---|
public int length() | 获取字符串中含有的字符个数,得到字符串长度 |
public String concat(String str) | 将当前字符串和参数字符串拼接成新的字符串返回 |
public char charAt(int index) | 获取指定索引位置的字符串 |
public int indexOf(String str) | 查找参数字符串在本字符串当中首次出现的索引位置,若没有就返回-1 |
- 3.2.2 字符串截取
方法 | 作用 |
---|---|
public String substring (int beginIndex) | 返回一个子字符串,从beginIndex开始截取字符串到字符串结尾 |
public String substring (int beginIndex, int endIndex) | |
返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。 |
- 3.2.3 字符串替换
方法 | 作用 |
---|---|
public char[] toCharArray() | 将当前字符串拆分成为字符串数组作为返回值 |
public byte[] getBytes() | 获得当前字符串底层的字节数组 |
public String replace(CharSequence oldString, CharSequence newString) | |
将所有出现的old字符串替换成new字符串,返回替换后的新字符串 |
- 3.2.4 字符串切片
方法 | 作用 |
---|---|
public String[] split(String regex) | 按照参数规则,将字符串切分成若干部分 |
以上,期待与大家一起探讨。
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了