#1.String
字符串采用unicode编码,一个字符占两个字节。
public class TestString {
/**
* String:它表示不可变的字符序列,底层使用char[]存放元素
* String是finall;即不可重复对一个String变量赋值
*/
public static void main(String[] args) {
String str1 = "panDa";
String str2 = "panDa";
String str3 = new String("panDa");
String str4 = "panDa"+"laoLi";
String str5 = "laoLi";
String str6 = str1+str5;
String str7 = "tiantian";
str7 = str7 + "kaixin";
String str8 = "panDalaoLi";
/**
* str1的"panDa"存放在字符串常量池中,对应一个地址(假设0x1234),地址存放在栈中
* str2先去常量池找"panDa",有的话,直接使用地址(0x1234),没有的话,新建一个地址
* str3:new表示在堆中开辟一个新的区间,区间地址(假设0x1235),地址存放在栈中,
* 同时该区间对应一个常量值"panDa",常量值存放在常量池中,常量值对应的地址(0x1234)
* 因此,new String("panDa")表示新建了两个对象,对象1的地址0x1234,对象2的地址0x1235
* 所以查找str3对应的值的时候,1.先找区间地址(0x1235),再找值地址(0x1234)
* ==:比较地址值
* equals:比较内容值
*/
//true(0x1234 == 0x1234)
System.out.println(str1 == str2);
//false(0x1234 != 0x1235)
System.out.println(str1 == str3);
//true("panDa == panDa")
System.out.println(str1.equals(str3));
//str4表示的是"panDalaoLi"对应的地址值
//str6表示的是str1的地址值与str5的地址值相加
System.out.println(str4 == str6);
//true(str4与str6对应的值是一样的)
System.out.println(str4.equals(str6));
//true(sr4与str8对应的常量池地址值是一样的)
System.out.println(str4 == str8);
//str7 = str7 + "kaixin";
/**
* str7="tiantian",同str1
* str7 = str7 + "kaixin",在常量池中重新开辟一个区间,即重新有个地址值
*/
Car car1 = new Car("audi");
Car car2 = new Car("audi");
System.out.println(car1);
System.out.println(car2);
//false(很明显这是new了两个地址)
System.out.println(car1 == car2);
//false(car1与car对应的是两个地址值,因为没有重写hashcode与equals方法)
System.out.println(car1.equals(car2));
//true(两个对象属性的地址是一样的)
System.out.println(car1.brand == car2.brand);
//true(两个对象的属性值是一样的)
System.out.println(car1.brand.equals(car2.brand));
}
}
class Car{
String brand;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
//构造函数
public Car(String brand) {
super();
this.brand = brand;
}
}
#2.String常用方法
public static void main(String[] args) {
String str1 = "abcdefgabd2345";
String str2 = "abcd";
//返回字符串的长度
System.out.println(str1.length());
//返回指定位置的字符
System.out.println(str1.charAt(3));
//比较两个字符串的值是否相等
System.out.println(str1.equals(str2));
//返回形参在字符串中首次出现的位置
System.out.println(str1.indexOf("de"));
//返回形参在字符串中最后一次出现的位置
System.out.println(str1.lastIndexOf("ab"));
//截取字符串,从第3个位置开始截取
System.out.println(str1.substring(3));
//截取字符串片段,从2开始(包含)到5结束(不包含)
System.out.println(str1.substring(2, 5));
//字符/字符串替换
System.out.println(str1.replace("ga", "ll"));
//字符串替换,基于正则表达式
System.out.println(str1.replaceAll("\\d", "z"));
//去除字符串首尾空格
System.out.println(str1.trim());
//字符串拼接
System.out.println(str1.concat("zzz"));
//字符串分隔符,返回字符串数组
System.out.println(str1.split("a"));
}