String类
String对于大家来说都不陌生,相信大家能够完全熟练运用String类的相关定义。本文主要就String类中的方法以及定义做详细的介绍。
1、字符串定义的四种方式
String str = "hello";
String str1 = new String{"hello"};
char[] array = {'a','b','c','d'};
String str2 = new String(array);
String str3 = new String(array,1,2);
以上为字符串定义的四种方式,其中第四种代表偏移量,表示传入一个数组array
从1
下标开始往后取2
位。所以最终结果为bc。
2、实例计算值是否相等
String str = "hello";
String str1 = new String("hello");
System.out.println(str == str1);
上述代码,结果为false,因为新new对象就会在堆空间开辟空间,而str的值存储在堆空间中的常量池中地址,str1存储的是堆空间new的内存的地址,str和str1的地址值是不同的所以其结果为false。
如果需要str和str1的结果相同时就需要使用equals方法比较:(str.equals(str1));
其结果为true
String str = "hello";
String str2 = "he" + new String("llo");
System.out.println(str == str2);
上述代码,结果为false,因为"he"
是存储在常量池中,而"llo"
是新new出来的对象存储在常量池中,它指向的是new的对象中value
数组中的值,当"he"
和"llo"
发生拼接式就会在堆上产生新的对象,并返回新的地址给str2,所以str和str2指向不同的地址,所以该结果为false。
Strig str = "hello";
String str3 = "he"+"llo";
System.out.println(str == str3);
上述代码,该结果为true,因为在反汇编时,"he"
和"llo"
,已经拼接成了"hello"
,常量池如果有相同的字符串,直接将结果返回出去,无论new 没new 对象,所以str和str3指向的是同一个地址,所以其结果是相同的。
3、inter()方法
String str = "hello";
String str1 = new String("hello").inter();
System.out.println(str == str1);
上述代码,结果为true,因为它调用了inter方法,str值为"hello"
,新new 的对象值也为"hello"
,当str1调用inter方法时,返回的时hello
,同时常量池中已经存在了"hello"
,所以不进入,并且直接返回hello
,所以其结果为true。
inter用法:如果常量池中有相同对象,他将对象直接返回
4、charAt()方法
charAt()方法:获取指定索引位置的字符
String str = "hello";
char mychar = str.charAt(1);
上述代码,输出结果为e,因为Strng存储是以value[]数组进行存储的,所以1下标指向的是e。
5、toCharArray()方法
toCharArray()方法:将字符串转换为字符数组。
String str = "hello";
char[] array = str.toCharArray();
System.out.println(array);
输出结果:hello
实例
1、给定字符串一个字符串, 判断其是否全部由数字所组成
String str = "12345"
for(int i = 0 i <str.length;i++){
char ch = str.charAt(i);
if(ch <'0' || ch >'9'){
System.out.prntln("不都是数字字符")
return;
}
}
结果为:不打印任何数字
2、字节与字符串
byte[] arr = {97,98,99,100};
String strr = new String(arr);
打印结果为:abcd
6、字符串比较
equals()方法和equaisIgnoreCase()方法
String str = "abc";
String str2 = "ABC";
System.out.println(str.equals(str2));//false
System.out.println(str.equalsIgnoreCase(str2));//true
System.out.println(str.compareTo(str2));
equals()方法,进行比较两字符串是否相同,返回boolean类型
equalsIgnoreCase()方法,忽略大小写进行比较
compareTo()方法,比较大小,返回有三种情况str>str2,str<str2,str=str2;
7、 String、StringBuffer、StringBuilder
String、StringBuffer、StringBuilder三者区别:
-
String的拼接会产生新的对象,但是StringBuffer和StringBuilder
是用append方法进行拼接,返回的是当前对象。 -
String的拼接被优化为 StringBuilder
-
StringBuffer用来保证线程安全,多用多线程,关键字:synchronized
-
StringBuilder 用于单线程
-
String用于单线程(不可写在循环里 会产生大量临时变量)
-
String方法没有StringBuilder和StringBuffer的方法多
String、StringBuffer、StringBuilder转换
String转换为StringBuilder
String str = "abc";`
StringBuffer sb = new StringBuilder (str)`
System.out.println(sb);`
StringBuilder sb1 = new StringBuilder();`
sb.append(str);`
System.out.println(sb1)`
String转换为StringBuilder 与转为StringBuffer相同
StringBuilder转String
StringBuilder sb = new StringBuilder("abc");`
String str = sb.toString();`
System.out.println(str);`