最后一个为FALSE是什么原因呢

解决方案 »

  1.   

    如果System.out.println(java.equals("Ja"+va)); 则相等,真是奇怪啊
      

  2.   

    == 是对object的地址进行比较,个人认为没什么实际意义。
      

  3.   

    我觉的,首先,String是一个Object来的,
    所以用==来比较,是比较他们是否同一个对象,
    因为java的编译优化的机制,所以
                String  java  =  "Java",  va  =  "va"; 
                System.out.println(java  ==  "Java"); 
                System.out.println(Other.java  ==  java); 
                System.out.println(java  ==  ("Ja"+"va")); 
                System.out.println(java  ==  ("Ja"+va)); 
    前面三个都是在编译的时候就可以静态确定的,所以分配到了
    同一个对象,所以比较结果是true
    而第四个,由于"Ja"+va是要等到运行的时候才能确定,
    所以会新分配了一个对象,所以是false
      

  4.   

    前三个为“true”就不用说了,最后一个为false是因为:
       在JAVA中,String有专门的strings池存放。当你建立一个String变量,编译时,如果编译器发现池中有相同的变量,它就直接引用该变量,否则创建新的(这一切都是在编译时完成的)。“==”操作比较的不仅是两个变量的值,而且还要比较它们的地址(在池中的位置是否相同),而"ja"+va这句话中由于va不是常量,不能在编译时完成此操作,所以该String不能放到String池中,自然地址不一样,java==("ja"+va)为false了 
      

  5.   

    o,看来要把think in java好好看看咯,仔细研究研究java的思想
    学习ing.....
      

  6.   

    qq_pride(无悔这一生) 说的对!!!
      

  7.   

    sorry ,the last is false
      

  8.   

    不要用==判断相等。
    而要用equals.
      

  9.   

    对第二个有点不明白,JAVA可以向下继承么?
      

  10.   

    说老实话,不怕诸位大哥笑话,四个输出都是 false,咱也没有试,只是想出来的。
    原因如下:对象的比较用==其实是句柄的比较,他们是两个不同的对象,不过所指的内容是一样罢了,但其句柄是不一样的,不知以为然否?
      

  11.   

    true 
    true 
    true 
    false
      

  12.   

    是这样的  ==用来判断string对象是否相等
    而 equal()用来判断字符串内容是不是相等
      

  13.   

    to skydog:
    string 兼有基本类型的一些特性,如果你用 String x =new String(...)
    则另当别论。true true true false
      

  14.   

    为了说明问题,我对原来的程序进行了如下改动:
    /** BEGIN */
    class  StringLiteral  { 
          public  static  void  main(String[]  args)  { 
                String  java  =  "Java",  va  =  "va"; 
                String  java2  =  new String("Java");
                System.out.println("=== 1 ==="); 
                System.out.println(java  ==  "Java"); 
                System.out.println(Other.java  ==  java); 
                System.out.println(java  ==  ("Ja"+"va")); 
                System.out.println(java  ==  ("Ja"+va)); 
                System.out.println("=== 2 ==="); 
                System.out.println(java . equals ( "Java")); 
                System.out.println(Other.java . equals ( java)); 
                System.out.println(java . equals ( "Ja"+"va")); 
                System.out.println(java . equals ( "Ja"+va)); 
                System.out.println("=== 3 ==="); 
                System.out.println(java == new String( "Ja"+va)); 
                System.out.println(java .equals( new String( "Ja"+va))); 
                System.out.println("\n=== 4 ==="); 
                System.out.println(java2  ==  "Java"); 
                System.out.println(Other.java  ==  java2); 
                System.out.println(java2  ==  ("Ja"+"va")); 
                System.out.println(java2  ==  ("Ja"+va)); 
                System.out.println("=== 5 ==="); 
                System.out.println(java2 . equals ( "Java")); 
                System.out.println(Other.java . equals ( java2)); 
                System.out.println(java2 . equals ( "Ja"+"va")); 
                System.out.println(java2 . equals ( "Ja"+va)); 
                System.out.println("=== 6 ==="); 
                System.out.println(java2 == new String( "Ja"+va)); 
                System.out.println(java2 .equals( new String( "Ja"+va))); 
          } 

    class  Other  {  static  String  java  =  "Java";  } 
    /** END */
    输出结果是:
    === 1 ===
    true
    true
    true
    false
    === 2 ===
    true
    true
    true
    true
    === 3 ===
    false
    true=== 4 ===
    false
    false
    false
    false
    === 5 ===
    true
    true
    true
    true
    === 6 ===
    false
    true问题应该已经说明白了。
    1、 "==" 比较的是内存地址,而不是值。
        而"equals"比较的是值,不是地址
    2、 通过变量声明,没有 new 的String变量,是在编译时确定的,
        所有值相同的变量指向同一个地址(共用一个实例)。
    3、 通过 new 生成的 String 值,是在运行期建立的,
        不与其他变量共享内存(建立的时候)。