呵呵,
各位,这个问题很基础……
也经常碰到……
我是新手……==与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中是怎么处理这个 "" 的?呵呵,谢谢各位的时间!

解决方案 »

  1.   

    String   s=null;         //所引用的对象为空,   如果调用String的方法会空指针异常    
      String   s="";             //所引用的对象相当与   new   String(new   char[0]);一个在堆里分配了存储空间,另一个没有分配存储空间
      

  2.   

    == 判断引用 
    equals是判断值对于String来说!
      

  3.   

    null就是什么都没有,纯粹意义上的空。比如Sting a = null。这句话的意思仅仅表明有一个变量,它是String型的。但它没有任何实际的意义,因为它没有指向内存。而“”指的是空字符串,这个字符串是存在的,但它是空字符串。长度为0。看下面的代码:
    System.out.println("".length());//输出为0
    System.out.println(null.length());//这个会报编译错误的 
      

  4.   

    这个问题很简单!送点分把!
    String str1="";
    String str2=null;
    str1表示内容为空,但是在内存中已经分配了空间
    str2表示对象为空,在内存中没有分配空间 
      

  5.   


    是哦,我也是初学者呢?楼主,有问题多问问……就我知道的吧,在java中==是判断两个引用符号是不是引用同一个对象
                  而equals()是判断两个字符串的内容是不是完全相同  
      

  6.   

    没错啊  ,str1指向的是""的地址,所以是true啊。。
      

  7.   

    貌似这个问题不是那么简单吧!!!!!
    楼主想知道为什么 ""==str1为什么也是true
    你把String str1="";改成String str1=new String("");
    就会发现变成false了-------------
    Java运行环境有一个字符串池,由String类维护。执行语句String s=""时,首先查看字符串池中是否存在字符串"",如果存在则直接将""赋给s,如果不存在则先在字符串池中新建一个字符串 "",然后再将其赋给s。
    执行语句String s=new String("")时,不管字符串池中是否存在字 
     符串"",直接新建一个字符串"",然后将其付给s。
      

  8.   

    String的问题一直是大家热烈讨论的问题。lz的理解其实没有错误。关键是String类的特殊性导致这一结果。
      

  9.   

    String  s=null;        //所引用的对象为空,  如果调用String的方法会空指针异常    
      String  s="";            //所引用的对象相当与  new  String(); 一个在堆里分配了存储空间,另一个没有分配存储空间
      

  10.   

    搂主记住在String 类中==是表示引用(地址)
    俄equals表示引用的对象(值)
      

  11.   

    大家都把理论搬出来没看出楼主意思,其实""是否==str1是不确定的,就是说有可能为true也有可能为false,有的虚拟机为了节省内存,把""和str1都指向同一地址,那么结果就是true,所以用==来判断内容是否相等是危险的。但是用equals来判断就是安全的,无论任何虚拟机楼主第二种情况的equals都是true
      

  12.   

    lz想详细了解去这里看看吧。
    http://topic.csdn.net/u/20080929/02/4e0ef626-98ee-4d6d-96ed-fe40afe8290b.html
      

  13.   

    ==比较的是内存地址,虽然java里不讲究地址,但是实际比较的是内存地址
    .equals比较的是指向的值你可以试下
    比较String a="abc"和b="a"+"bc",分别用==和.equals
      

  14.   

    LS超过一半的人不认真看题的貌似只有mumu_java、0210、Johnson_Hong这三个人知道LZ想知道啥吧
      

  15.   


    谢谢 
    Johnson_Hong
    你理解了我的意思,
    并给出了正确回答,
    我给你80分!各位网友,请先看清楚我表达的意思!!
    不要胡乱回答,
    只能添堵!!
      

  16.   


    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
      

  17.   

    另外建议参考帖子:
    http://topic.csdn.net/u/20090307/18/882f17e2-5ee6-4411-9c69-61dadd30b5db.html这是一个Jvm自动优化的例子,特别要注意回帖中的一段反编译代码.
      

  18.   

    String str2=null;这句是干扰的,,很多人都只看前两句话,,,,,