就象这样:
String a = new String("hello") ;
String b = "hello";
a,b当然是一样的值,但却是两个不同的对象!

解决方案 »

  1.   

    你用下边的语句运行看看就明白了.if (a==b) System.out.print("a=b");
    if (a.equals(b)) System.out.print("a.equals(b)");
      

  2.   

    请看 System 的 static String getProperty(String key) 方法,返回的是String
      

  3.   

    这么说吧,你买了两支一模一样的圆珠笔,它们是不是相同呢?他们是不是就是一支笔呢?
    所以,a.equals(b), 因为他们的确一模一样。
    所以,a != b,因为他们本来就是两支笔。一支笔用完了,另一支笔还是满的。
    当年古龙就是这样对我解释的。
      

  4.   

    a是一个新建String实例,他的值和System.getProperty("java.version")一样,但是不是System.getProperty("java.version").
    b就是System.getProperty("java.version") 
      

  5.   

    仔细想了一下,a和b在使用上没有区别,a和b都是值和System.getProperty("java.version")相等的String实例,都不是真正内存中的属性。但是a生成时的效率比b低,因为在System.getProperty("java.version")时已经new了一个实例,再次new的时候又生成一遍实例。
      

  6.   

    好像对于String对象,由于其不可变性,虚拟机在生成这样的对象时,都是使用同一个地址
    即a和b不但内容相同,而且地址也一样
      

  7.   

    if (a==b) System.out.print("a=b");
    if (a.equals(b)) System.out.print("a.equals(b)");
    可以看出他们的不同,同样的值但不同的内存地址。
    同时java虚拟机的垃圾回收时也视其不同,当a或b被别的字串负值后,可能就被当作垃圾回收了,你可以通过这个方式发觉他们的不同。
      

  8.   

    小弟在这里先谢大家了,呵呵,看来要加点分啊,
    我提的问题,a和b的用法是一样的了,这个大家确定了啊,说到地址,是不是象c++里分配动态
    内存的那样呢,用new分配的在栈里,a和b的内存空间根本就不一样啊,!!!
    那就顺便大家给点建议了,有什么好书推荐啊,我需要大量java code啊,大家知道哪里有吗?
      

  9.   

    "=="表示两个对象完全相同
    ".equals"仅仅表示值相同
      

  10.   

    to:
    htl(海豚) ( )
    真的是这样吗?
    也要看具体每个类里面是怎样实现的吧
      

  11.   

    错了,不一样的你看看, <Effective Java>  就知道的主要是 String 是一个不变类,为了提高效率,正常创建的 相同的 String 都是同一个对象,但
    String a = new String( System.getProperty("java.version")) ;
       String b =  System.getProperty("java.version") ;
    这样就不是同一个对象了.
      

  12.   

    那在定义和使用的时候有什么不一样呢,要注意什么呢!!!
    java是值传递的,那地址对java来说有什么意义呢,我对垃圾回收不怎么熟悉啊,望大家
    说说了,
      

  13.   

    哈哈,java 是传值的,只是对于基本类型来说的.对于,"类",全部都是传地址的!!!!!!!!!不信你可以自己写一个程序来试试!!!!