您的位置:首页 > 编程语言 > Java开发

java学习笔记-String相关知识点

2016-10-14 13:27 369 查看
java的类成员变量,java会自动初始化,默认初始化类型的零值。局部变量必须显式初始化才能使用,否则编译器会报错。

java对String的”+”运算符提供了特别支持,使用的是StringBuilder或StringBuffer的append()方法

Arrays.copyOf(char []original,int newLength); 复制char数组的方法,复制original数组到一个新数组并返回新数组,newLength为新数组的长度,若newLength大于原数组长度,返回新数组多余部分填充空值,若小于则截断。

凡用字面量创建的字符串对象存储在虚拟机方法区的常量池中,如
String s = "abc"
。而通过
new
创建的对象储存在java堆中。

public class TestString {
public static void main(String[] args) {
String  str = "abcd";  //字符串常量,在编译期就确定了
String s = "d";
String str1 = "abc"+"d"; //多个字符串常量连接,结果也为字符串常量,在编译期确定
System.out.println(str1==str); //true

String str2 = "abc"+new String("s"); //后部分在编译期不能确定,str2为在java堆新创建的对象
System.out.println(str==str2);  //false

String str3 = "abc"+s;   //s引用在编译期仍不能确定,str3为在java堆新创建的对象
System.out.println(str==str3);  //false

//str.intern() String的intern方法:当String实例调用intern方法时,
// 到常量池查找是否有该实例的常量,若有返回常量引用,若无,创建该实例常量并返回其引用。
String str4  = str.intern();
System.out.println(str==str4); //true,str指向字面量,两者指向常量池同一内存。
System.out.println(str2==str4); //false ,str2的对象在java堆上,不在常量池
System.out.println(str3==str4); //false ,str3同样在java堆,不相等

//String类的不可变性带来的结果就是,每一次"+"连接操作都会生成一个String对象,
// 具体在java堆生成还是常量池生成取决于是否能在编译期确定,如str在常量池生成,str2、str3在java堆中
String str5 = "welcome "+"to "+"java "+"world"; //除4个直接量对象和最终的str5对象,还生成了
//"welcomet to"、"welcome to java "2个临时对象。因此,存在多个字符串连接时使用StringBuilder

//补充
//基本数据类型常量及经final修饰过的字段也能在编译期确定
String string = "abc1";
String str6 = "abc"+1;
System.out.println(string==str6);  //true,1为基本数据类型,可在编译期确定
final String d = "d";
String str7 = "abc"+d;
System.out.println(str==str7);  //true,final修饰的变量在编译期可确定

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐