java中的String

知识点1:

String s1="abc";
String s2="abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
/*output:
true
true
*/

1、“abc”会在第一次出现时存放在内存中“方法区的运行时常量池“;

2、s1和s2是栈上的两个指向同一常量池地址的引用,故相等(==);

3、equals方法实现中(String类中),首先比较二者是否相等(==),然后比较成员变量value(char value[])数组的长度,最后比较value数组的每一个char是否相同;

知识点2:

String s1=new String("abc")";

1、如果常量池中无"abc",会在常量池中创建该字符串常量对象;

2、new会复制常量池的“abc”常量对象,在堆上创建对象,将引用赋值给栈上的引用s1;

知识点3:

String s1="a"+"b"+"c";
String s2="abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
/*output:
true
true
*/

1、编译时"a"+"b"+"c"就会优化成“abc”存入常量池;

知识点4:

String s1="ab";
String s2="abc";
String s3=s1+"c";
System.out.println(s3==s2);
System.out.println(s3.equals(s2));
/*output:
false
true
*/

1、String是一个final类型的类(public final class String);

2、Java 语言提供对字符串串联符号(”+”)以及将其他对象转换为字符串(toString)的特殊支持;

3、字符串串联(“+”)是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的;

4、字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承;

5、注意s3是StingBuffer将“ab”和“c”合并成“abc”,然后通过toString将其转换成字符串,在堆上!!

猜你喜欢

转载自my.oschina.net/u/3847203/blog/1807681