10 String 字符串
1.相等性规则
== 比较运算符
-
比较基本数据类型,判断的是值是否相等(基本数据类型只能用“”比较)
-
==比较引用类型,判断的是内存地址是否相等
equals()方法
-
Object类的equals()方法,比较的内存地址是否想等;
-
String类的equals()方法,比较的是值是否相等;
-
按照自己的相等性规则进行比较,需要自定义equals方法;
2.String类型
String类型是一个引用类型,即栈中存放对象名和对象的引用,堆中存放String对象;
String类型的对象,底层实际是一个final修饰的char类型的数组。
2.1创建String类型的对象
String a="abc";
/*这种创建方式,会把值存放到字符串常量中
字符串常量池,可以理解为一个String的数据集,它是在堆内存中开辟的一块特殊内存
*/
String b= new String("abc");
/*着中国创建方式,就是创建一个String 类型的对象,是在内存中申请一块内存*/
boolean tar=(a==b);//false,==比较的是内存地址
2.2常用方法
方法 | 返回值 | 作用 | 示例 |
---|---|---|---|
equals() | boolean | 比较字符串是否值相等 | String a = “hi”;String b = ”hello”;boolean tar = a.equals(b); |
length() | int | 返回字符串的长度 | int len = a.length(); |
trim() | String | 去除字符串两端的空格 | String b = a.trim(); |
replace() | String | 替换字符串中的指定字符(串) | a.replace(s1,s2);s1-被替换的字符串s2-替换字符串 |
concat() | String | 拼接字符串 | a.concat(“123”); |
toLowerCase() | String | 字符串转小写 | a.toLowerCase(); |
toUpperCase() | String | 字符串转大写 | a.toUpperCase(); |
split(",") | String[] | 根据指定字符把字符串切分成数组,返回String[] | String a = “a,b,c”;char[] arr = a.split(“,”); |
contains() | boolean | 判断字符串中是否包含指定字符 | a.contains(“a”); |
substring(1) | String | 根据下标截取字符串,从指定下标到字符串末尾 | substring(int startIndex);String b = a.substring(1); |
substring(1,2) | String | 截取下标范围内的字符串,从开始下标到结束下标 | substring(int s, int e);s-开始下标e-结束下标 |
indexOf() | int | 获取指定字符在字符串中的下标 | int index = a.indexOf(“a”); |
charAt() | char | 获取字符串中指定下标的字符 | char c = a.charAt(1); |
isEmpty() | boolean | 判断字符串是否为空 | boolean tar = a.isEmpty(); |
toCharArray() | char[] | 将字符串转成字符数组 | char[] d = a.toCharArray(); |
String.valueOf() | String | 将变量转为String类型 | int a = 1;String b = null;b = String.valueOf(a); |
//14 String类的静态方法 format() 能用来创建可复用的格式化字符串
float f1 = 1.1f;
int i2 = 10;
String s3 = "hello";
String str = String.format("浮点型%f 整型%d 字符串%s", f1, i2, s3);
System.out.println(str); //打印:浮点型1.100000 整型10 字符串hello
3.字符串常量池
3.1字符串常量池的设计思想
字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能