一、String类
java.lang.String
1.概述
String:字符串,使用一对""引起来表示。 1.String声明为final的,不可被继承 2.String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小 3.String内部定义了final char[] value用于存储字符串数据 4.通过字面量的方式(区别于new给一个字符串赋值,此时的字符串值声明在字符串常量池中)。 5.字符串常量池中是不会存储相同内容(使用String类的equals()比较,返回true)的字符串的。
2.String的不可变性
2.1说明
1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
2.当对现的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
3.当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
2.2代码举例
@Test public void test1(){ String s1 = "abc"; //字面量的定义方式 String s2 = "abc"; s1 = "hello"; System.out.println(s1 == s2);//比较s1\s2的地址值-->相等 System.out.println(s1);//hello System.out.println(s2);//abc String s3 = "abc"; s3 += "def"; System.out.println(s3);//abcdef System.out.println(s2);//abc String s4 = "abc"; String s5 = s4.replace("a", "m"); System.out.println(s4);//abc System.out.println(s5);//mbc }
3.String实例化的不同方式
3.1方式说明
方式一:通过字面量定义的方式:
方式二:通过new + 构造器的方式:
3.2代码举例
@Test public void test2(){ //方式一:通过字面量定义的方式: // 此时的s1\s2的数据JavaEE声明在方法区中的字符串常量池中 String s1 = "JavaEE"; String s2 = "JavaEE"; //方式二:通过new + 构造器的方式: // 此时的s3\s4保存的地址值,是数据在堆空间中开辟空间以后对应的地址值 String s3 = new String("JavaEE"); String s4 = new String("JavaEE"); System.out.println(s1 == s2);//true System.out.println(s1 == s3);//false System.out.println(s1 == s4);//false System.out.println(s3 == s4);//false System.out.println("*********************"); Person p1 = new Person("Tom",12); Person p2 = new Person("Tom",12); System.out.println(p1.name.equals(p2.name));//true System.out.println(p1.name == p2.name);//true p1.name = "Jerry"; System.out.println(p2.name); }