呵呵,
各位,这个问题很基础……
也经常碰到……
我是新手……==与eauals()的区别,我想我懂的……
前者比较的是字符串对象的指针地址,
后者比较的是字符串对象的内容,那么: String str1="";
String str2=null;
if(""==str1)
System.out.println("\"\"==str1 is true!");
if("".equals(str1))
System.out.println("\"\".equals(str1) is true!");
测试代码中,
那个判断都是true的那么,我搞不懂了?
我想,我应该先搞懂 "" 是什么东西?
那么,java中是怎么处理这个 "" 的?呵呵,谢谢各位的时间!
各位,这个问题很基础……
也经常碰到……
我是新手……==与eauals()的区别,我想我懂的……
前者比较的是字符串对象的指针地址,
后者比较的是字符串对象的内容,那么: String str1="";
String str2=null;
if(""==str1)
System.out.println("\"\"==str1 is true!");
if("".equals(str1))
System.out.println("\"\".equals(str1) is true!");
测试代码中,
那个判断都是true的那么,我搞不懂了?
我想,我应该先搞懂 "" 是什么东西?
那么,java中是怎么处理这个 "" 的?呵呵,谢谢各位的时间!
String s=""; //所引用的对象相当与 new String(new char[0]);一个在堆里分配了存储空间,另一个没有分配存储空间
equals是判断值对于String来说!
System.out.println("".length());//输出为0
System.out.println(null.length());//这个会报编译错误的
String str1="";
String str2=null;
str1表示内容为空,但是在内存中已经分配了空间
str2表示对象为空,在内存中没有分配空间
是哦,我也是初学者呢?楼主,有问题多问问……就我知道的吧,在java中==是判断两个引用符号是不是引用同一个对象
而equals()是判断两个字符串的内容是不是完全相同
楼主想知道为什么 ""==str1为什么也是true
你把String str1="";改成String str1=new String("");
就会发现变成false了-------------
Java运行环境有一个字符串池,由String类维护。执行语句String s=""时,首先查看字符串池中是否存在字符串"",如果存在则直接将""赋给s,如果不存在则先在字符串池中新建一个字符串 "",然后再将其赋给s。
执行语句String s=new String("")时,不管字符串池中是否存在字
符串"",直接新建一个字符串"",然后将其付给s。
String s=""; //所引用的对象相当与 new String(); 一个在堆里分配了存储空间,另一个没有分配存储空间
俄equals表示引用的对象(值)
http://topic.csdn.net/u/20080929/02/4e0ef626-98ee-4d6d-96ed-fe40afe8290b.html
.equals比较的是指向的值你可以试下
比较String a="abc"和b="a"+"bc",分别用==和.equals
谢谢
Johnson_Hong
你理解了我的意思,
并给出了正确回答,
我给你80分!各位网友,请先看清楚我表达的意思!!
不要胡乱回答,
只能添堵!!
String str1="";//此处str1已经被初始化,分配给str1的是String 为类型,只不过没有内容.是空的.可以进行String类型的所有动作.
String str2=null;//此处没有初始化,能被进行的运行只能是判断,比较和被赋值,不能够进行其它的动作了.
if(""==str1)
System.out.println("\"\"==str1 is true!");
if("".equals(str1))
System.out.println("\"\".equals(str1) is true!");
测试代码中,
那个判断都是true的 那么,我搞不懂了?
我想,我应该先搞懂 "" 是什么东西? //答:与一般的String类型相同.
那么,java中是怎么处理这个 "" 的? //答:同上.呵呵,谢谢各位的时间! 默认的equals()比较的永远是内容是否相等.
对于“==”的比较,楼主真正要搞明白的是:String是如何被JVM进行优化的.
当如下定义Stirng时,可以将String当作基本类型
String strA = "abc";
String strB = "abc";
strA == strB可以当成基本类型的比较方法,直接比较内容是否相等.如果是用new 生成的方式:
String strA = new String("abc");
String strB = new String("abc");
则“=="比较的是地址指针.
strA == strB 输出为false.测试代码如下:
public class Test {
public static void main(String []args){
String strA = "abc";
String strB = "abc"; System.out.println("str = abc");
if(strA == strB){
System.out.println(true);
}else{
System.out.println(false);
} strA = new String("abc");
strB = new String("abc");
System.out.println("new String()");
if(strA == strB){
System.out.println(true);
}else{
System.out.println(false);
}
}
}//console
str = "abc"
true
new String()
false
http://topic.csdn.net/u/20090307/18/882f17e2-5ee6-4411-9c69-61dadd30b5db.html这是一个Jvm自动优化的例子,特别要注意回帖中的一段反编译代码.