#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")); }