常用类
**1、String **
(1)String字符串,使用一对 “” 双引号引起来表示
(2)String实现了Serializable接口,支持序列化
(3)String是通过final声明的,不可被继承,不可变
(4)当字符串重新赋值后,地址值也随之改变,因为String是不可变行用final修饰
//1、字符替换,把a字符改成d
String str = "abc"; //在方法区
String str1 = new String("abc"); //在堆空间中
str.repalce('a','d');
(5)String实例化的方式
- 字面量定义
- new + 构造器的方式
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); //true 因为都在方法区 找的都是“abc”
String s3 = new String("abc");
System.out.println(s1 == s3); //false 一个在方法区中,一个在堆中 ,比较的地址值
String s4 = new String("abc");
System.out.println(s3 == s4); //false 都在堆中 ,比较的地址值
(6)面试题
//面试题1:
String str = new String("abc");
//问:上面代码一共创建了几次对象?
//答:2次。一次是new在堆中开辟的空间,一次是在常量池中去找是否有”abc“ char数组,如果没有在常量池中创建,如果有直接使用即可。
//面试题2:
String s1 = "abc";
String s2 = "dfe";
String s3 = "abcdfe";
String s4 = "abc" + "dfe";
String s5 = s1 + "dfe";
String s6 = "abc" + s2;
String s7 = s1 + s2;
System.out.println(s3==s4); //true
System.out.println(s3==s5); //false
System.out.println(s3==s6); //false
System.out.println(s3==s7); //false
System.out.println(s5==s6); //false
//只要是有其他的变量名参与,那就相当于new的都不是在常量池中的。
//常量与常量拼劲是在常量池中存在的,常量池中不会有相同内容的常量。
String s8 = s5.intern(); //返回得到的s8是使用常量池中存在的
System.out.println(s3 == s8); //true
//面试题3:
public class StringTest{
String str = new String("good");
char[] ch = {'t','e','s','t'};
public void change(String str,char[] ch){
str = "test";
ch[0] = 'b';
}
public static void main(String[] args){
StringTest st = new StringTest();
st.change(st.str,st.ch);
System.out.println(st.str); //good
System.out.println(st.ch); //best
}
}
//String地址值是不可变的,重新赋值是赋的新值
2、String的常用方法
public class Test{
@Test
public void test(){
String str = "hello";
System.out.println(str.length()); //获取字符串的长度
System.out.println(str.charAt(0)); //返回str索引为0的字符
System.out.println(str.isEmpty()); //判断str是否是空字符串
String strChangeLower = str.toLowerCase();
String strChangeUpper = str.toUpperCase();
System.out.println(strChange); //把str所有字符转换成小写,需要用新的变量名接收
System.out.println(strChangeUpper); //把str所有字符转换成大写,需要用新的变量名接收
String strTrim = " hello ";
System.out.println(strTrim.trim()); //去除strTrim首位的空格
System.out.println(str.equals(strTrim)); //比较str和strTrim是否相同
System.out.println(str.equalsIgnoreCase(strTrim)); //比较str和strTrim是否相同,忽略大小写
String str1 = str.concat(strTrim);
System.out.println(str1); //拼接字符串
System.out.println(str.compareTo(strTrim)); //str和strTrim比较大小 ,打印的是正数 str>strTrim
System.out.println(str.substring(2)); //从索引为2截取到末尾
System.out.println(str.substring(2,5)); //从索引2开始截取到索引为5的字符串,左闭右开
}
}
3、String与基本数据类型转换
//调用包装类,String转基本数据类型
String str = "123";
int num = Integer.parseInt(str);
//基本数据类型转String
String str2 = String.valueOf(num);
//也可以
String str3 = num + "";
tring str = “123”;
int num = Integer.parseInt(str);
//基本数据类型转String
String str2 = String.valueOf(num);
//也可以
String str3 = num + “”;