String,根本数据类型和汇合
一.String和Stringbuffer类
1.String的申明
string s1="abc";string s2 = new String("abc");
2.String内容的比拟
在String中,比拟两个字符串是否雷同,不能应用==,应应用equals()办法。
1.“==”办法:比拟的是变量(栈)内存中寄存的对象的(堆)内存地址,用来判断两个对象的地址是否雷同
String str1 = "zjd";//间接赋值String str2 = new String ("zjd");//通过new赋值String str3 = str2;System.out.println("str1 == str2-->"+(str1 == str2));System.out.println("str1 == str3-->"+(str1 == str3));System.out.println("str2 == str3-->"+(str2 == str3));
起因:
- 每一个String对象的内存存储其实都是在堆内存中。
- "=="是进行数值比拟的,因为str1和str2的在堆内存的地址不一样所以:str1和str2不相等–>false
2.“equals()"办法:比拟的是两个对象的内容是否相等
String str1 = "zjd";//间接赋值String str2 = new String ("zjd");//通过new赋值String str3 = str2;System.out.println("str1 equals str2-->"+(str1.equals(str2)));System.out.println("str1 equals str3-->"+(str1.equals(str3)));System.out.println("str2 equals str3-->"+(str2.equals(str3)));
起因:因为equals()办法的作用是将内容进行比拟,所以此处返回的后果都为true。
3.两种实例化对象的区别
一个字符串就是一个String 类中的匿名对象,匿名对象就是曾经开拓了堆内存空间能够间接应用的对象。
1.间接赋值
String str1 = "zjd";//间接赋值String str2 = "zjd";String str3 = "zjd";System.out.println("str1 == str2-->"+(str1 == str2));System.out.println("str1 == str3-->"+(str1 == str3));System.out.println("str2 == str3-->"+(str2 == str3);
起因:实际上就是把一个在堆内存中开拓好的空间使用权给str1,并且如果一个字符串曾经被一个名称所援用,则当前再有雷同的名称的字符串申明时,就不会从新开拓新地址了
2.通过new的形式实例化
String str1 = new String("zjd");
4.一旦被初始化,字符串内容便不能够被扭转
String str1 = "zjd";str1 =str1+"zka";System.out.println(str1);后果:zjdzka