public class Exam {
public static void main(String[] args) {
System.out.println("ja" + "va" == "java");
}}为什么输出的是ture?谁能说下原理?

解决方案 »

  1.   

    为什么不是呢?先执行+,"java"=="java",执行了逻辑表达式,返回就ture了
      

  2.   

    因为 java 和 java 一样吗 呵呵因为你没有创建新的对象啊 如果用 new 做的话 就是false了
    只是简单的比较 不要想的很麻烦哦
      

  3.   

    再补充一点 
    例如
    public class DengTest
    {
        public static void main(String [] args)
        {
           System.out.println(new String("ja")+new String("va")=="java");
        }
    }
    就是false啦
      

  4.   

    首先,根据运算符的优先级计算了"ja" + "va" 得到的是字符串"java",
    此时"java"是个常量,同时你给出的"java"也是个常量,根据编译器的优化原则,
    这两个相同的常量就保存在同一地址里面。
    在进行==时是进行的逻辑比较。比较的是他们的地址。所以进行了==后表达式为true。如果用equals的话,进行的就是实际字符串的比较。字符串相等就等,不等就不等。
      

  5.   

    http://topic.csdn.net/u/20071117/11/262787bb-57ec-4a9b-9e0b-38785319fc54.html?569438221
    http://topic.csdn.net/u/20081129/21/050c006b-e41f-45af-aa2f-120ca4d6e55d.html?93299
      

  6.   

    "ja" + "va" == "java" 是比较表达式,结果只有两个值“true”和“false”。
      

  7.   

    "ja" + "va" 和"java"都是字符串常量
    在内存中的地址是一样的,
    当然是true了 /**
     * 字符串常量测试
     */
    package net.csdn.blog.johnsnton;/**
     * @author Administrator
     *
     */
    public class TestString { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String str1 = "java"; //字符串常量
    String str2 = new String("java"); //字符串对象

    System.out.println(str1 == str2);

    System.out.println("ja" + "va" == "java");
    }}
    运行结果:
    false
    true
      

  8.   

    俩常量都被存储在栈中,java会预编译成一字符串java,所以比较起来就是true`
      

  9.   

    csdn出什么问题了?结了的贴还在待解决区?