String(一个特殊的数据类型)
在我的眼里,我觉得String是一个特殊的数据类型,为什么特殊呢?因为最初我以为它和byte、boolean、char、short、int、float、long、double等八种基本数据类型一样,甚至最初还把它当成了八种基本数据类型之一。后来才发现是错的。那它为什么它不属于基本数据类型呢,这是因为基本数据类型不能创建对象,而String是可以创建对象的,String它是一个类,而基本数据类型不是,这就是这个数据类型的特别之处。
String创建对象
String创建对象有两种方法:
- 其一:String str3 = “abc”;,直接将字符串赋值给一个String对象
创建原理:其实对于一些初学者是不明白它的创建原理,这里的“abc”其实不是在堆中,而是在常量池中,当创建String对象时,如果是第一次创建“abc”这个对象,就会首先在常量池中分配空间,然后将“abc”存储进去,然后再将常量池中存储“abc”的地址引用直接赋给String对象,如果不是第一次创建“abc”这个对象,那么就会拿着“abc”在常量池中查找,然后将查找到的地址引用赋给新建的对象,所以用过用这一种方法创建String对象的话,无论创建多少个值为“abc”的对象,这些对象的引用都是同一个。
2. 其二:String str1 = new String(“abc”);,
创建原理:其实我们可以将这个代码分为三个部分,即 “String str1“、“=“、“new String(“abc”)", "String str1"这第一部分其实只是创建了一个String对象,但并未赋值,也就是说,它没有去创建值为“abc”的对象,第二部分“=”是一个赋值表达式,明显没有创建对象,第三部分“new String(“abc”)"其实创建了两个"abc"字符串对象,首先会拿着“abc”在常量池查找有没有,没有便新开辟一个空间然后将“abc”存储其中,然后我们在看new这个关键词,通过new创建的对象都会在堆中,所以这里的第二个“abc”字符串对象就是在堆中。
String中的常用方法
1.concat(str1):该方法是在调拥对象的字符串末尾追加目标字符串(str1),并返回一个新的字符串。
2.substring(beginIndext):该方法是从开始下标处截取
到字符串末尾,并返回一个新的字符串。
3. substring(beginIndex,endIndex):该方法是从开始下标处(包含)截取到结束下标处(不包含),并返回一个新的字符串
4. toLowerCase():转小写,并返回一个新的字符串
5. toUpperCase():转大写,并返回一个新的字符串
6. trim():去掉首尾空格,并返回一个新的字符串
7. replac(targetChar,newchar):使用newchar替换targetchar;特殊用法:replace(" “,”");可去掉字符串中的所有空格,囊括了trim()方法的去首尾空格,包括了去掉字符串中间的空格。
8. length():获取字符串的长度,index+1;
9. equals():比较两字符串是否相等(区分大小写)
10. equalsIgnoreCase():比较两字符串的是否相等(不区分大小写);
11. startsWith(str1):判断字符串是不是以str1开头;
12. endWith(str2):判断字符串是不是以str2结尾;
13. indexOf(char1):查找字符串第一次出现的下标(char1可以使用字符对应的ASCII码)如果括号里是一个字符串,则是查找一个字符串第一次出现的下标
14. lastIndexOf(char2):查找字符串最后一次出现的下标(char1可以使用字符对应的ASCII码)如果括号里是一个字符串,则是查找一个字符串最后一次出现的下标
15. charAt(index):获取指定下标上的字符
16. valueOf(type):把type类型的数据转换成字符串。
17. copyValueOf(charArray):把字符数组转换成字符串;
18. copyValueOf(charArray,beginIndex,count):把从开始下标的count个字符数组元素转化成字符串。
使用情况
public class Test {
public static void main(String[] args) {
/**
* 使用String类常用的方法:
*/
String str ="0123467dadfgbcHUINIUDEF";
str = str.concat("123");
System.out.println(str);
str = str.substring(2);
str = str.substring(1, 8);
str = str.toLowerCase();
str = str.toUpperCase();
str = " 134342 3abc 1234567 ";
str = str.trim();
str = str.replace('3', 'Z');
str = str.replace(" ", "");
int len = str.length();
System.out.println( len);
System.out.println(str);
System.out.println(str.equals("12oabcDEBJBJIBIJF12o"));
System.out.println( + str.equalsIgnoreCase("12oABbdsaibfdCDEF12o"));
System.out.println(str.startsWith("12"));
System.out.println(str.endsWith("F12o"));
System.out.println(str.indexOf('o'));
System.out.println(str.indexOf("2"));
System.out.println(str.lastIndexOf(49));
System.out.println(str.lastIndexOf("12"));
System.out.println( str.charAt(6));
System.out.println(String.valueOf(true));
System.out.println(String.valueOf(100));
System.out.println( String.valueOf(123.12));
System.out.println(String.valueOf('A'));
char[] cs = {'1','2','A','B','C','d'};
String copyValueOf1 = String.copyValueOf(cs);
System.out.println(copyValueOf1);
String copyValueOf2 = String.copyValueOf(cs, 2, 3);
System.out.println(copyValueOf2);
}
}
提示
以上只是我自己的看法,如有相同纯属意外。如有错误,也请谅解,勿喷!如有收获或疑问,欢迎点赞评论。