每天学习十分钟16之Java学习笔记

以Java的字符串来说,就有一些必须注意的特性:
- - -字符串常量与字符串池
- - -不可变动(Immutable)字符串

1、字符串常量与字符串值
用以下代码段来说明:

String name1 = "zhangsan";
String name2 = "zhangsan";
String name3 = new String("zhangsan");
String name4 = new String("zhangsan");
System.out.println(name1 == name2);
System.out.println(name1 == name3);
System.out.println(name3 == name4);

//  代码段分别显示true,false, false的结果

分析:在Java中为了效率考虑,以“”包括的字符串,即字符串常量(String literal),只要内容相同(序号、大小相同),无论在程序代码中出现几次,JVM都只会建立一个String实例,并在字符串池(String pool)中维护。第一个结果为true,是因为新建name1的时候,JVM会建立一个String实例放在字符串池中,并给name1参考,而第二行则是让name2直接参考至字符串池中的String实例。至于后面的false,因为new时建立了新对象,name3与name4都是参考至新建的String实例。
如果想比较对象实质内容是否相同,不要使用==,要使用equals(),同样地,如果想比较字符串实际字符内容是否相同,不要使用== ,要使用equals()。

2、不可变动字符串
在Java中,字符串对象一旦建立,就无法更改对象中任何内容,对象上没有任何方法可以更改字符串内容。用+实现连接字符串是怎么达到的?例如:

String name1 = “Java”;
String name2 = name1 +“World”;
System.out.println(name2);

上面这个程序片段会显示JavaWorld,由于无法改变字符串内容对象,所以结果不是直接在name1参考的字符串对象之后添加World内容。反编译后得到:使用+连接字符串 ,会建立java.lang.StringBulider对象,使用其append()方法来进行+左右两边字符串附加,最后再转换为toString()返回。
总结:在重复性场合如循环或递归时尽量不要使用+连接字符串,这会因为频繁产生新对象,造成效能上的负担。

你可能感兴趣的:(每天学习十分钟,Java笔记,java,string,每天学习十分钟)