请教一些java问题!谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/22 20:25:02
第一个问题:
public class Test11{
public static void main(String[] args){
String str1 ="flyweight";
String str2 ="flyweight";
String str3 ="fly"+"weight";
String str4 ="fly";
String str5 ="weight";
String str6=str4+str5;
System.out.println(str1==str6);//为什么这里会返回false
System.out.println(str1==str3);//为什么这里会返回true
}
}
利用+连接字符串不是会产生一个新的字符串吗?那str3跟str6有什么区别

第二个问题:
比如这样声明一个新的对象:
StringBuffer sb = new StringBuffer();
跟这样声明一个新的对象:
StringBuffer sb = new StringBuffer("");
两个都声明的是一个空字符串对象吗?
还有如果声明的是空字符串那跟声明变成null有什么区别?(内存空间分配不一样吗?)
谢谢前辈们能答疑!

==是判断再内存中的地址是否相同,判断内容是否相同用equals。
str3的内容是flyweight,已经再内存中存在,所以实际上是再栈新建了个索引,指向str1.
str6=str4+str5;字符串的特性,+的时候就是这样,在内存中新建一块区域,拼接+前后的字符串。
StringBuffer不是这样的,StringBuffer是在+前的地址中接着拼接!

StringBuffer sb = new StringBuffer();
sb=null;一种数据类型
StringBuffer sb = new StringBuffer("");
sb=“”;什么也没有
在程序中上面的sb运行的时候容易出现空指针异常。
所以一般采取下面的方式!

str3,,你自己把门关到做事情,,别人怎么知道。。。所以就这样解释

利用+连接字符串是会产生一个新的字符串.
str3跟str6没有什么区别,都是把对象的内容copy到新的内存中;

StringBuffer sb = new StringBuffer("");
构造一个对象初始化参数为"";
StringBuffer sb = new StringBuffer();
构造一个默认对象,但默认的就是一个空的字符串,所以跟上面的没什么分别;

声明成null的话是并没有初始化对象.系统自动把指针指向一个null的位置.你操作的话就可能会出现错误.

==是判断内容是否一致.
equals比较的是对象是否一致.

因为这是String的特性。也就是说String a = "aaa";和String a = new String("aaa");是不同的。再声明String b = "aaa";时,不会再开辟一个空间存放"aaa",因为a已经声明过了。所以其实a和b都是指向同一空间,所以str1==str3会返回true。