public class Test {
    public static void main(String[] args) {
       final String pig = "length: 10";
//1
       final String dog = "length: 10";
//2
       final String dog = "length: " + pig.length();
        System.out.println("Animals are equal: " + (pig == dog));
    }
}
//定义dog的时候,分别用这两种方法,有什么不同嘛?请指点一下?

解决方案 »

  1.   

    ==比较是数据是否位于内存中的同一个区域,比较的是引用。想比较内容还是使用equals方法的好
      

  2.   

    http://www.javafan.net/article/20051123104052263.html
    比较详细了,看了就明白了
      

  3.   

    你这比较相当于比较两个指针是否指向同一块内存地址(当然是,JAVA是没有指针的)
    不管你给这两个变量初始化成一个什么样的值,结果都是FALSE的
      

  4.   

    简单地说要比较两个数据要用equals()方法
    例如A.equals(B)是比较A和B
    ==比较的是引用
      

  5.   

    1是true,2是false吧?
    1的话编译器会对final常量作优化,pig和dog指向的是同一个存储单元。
      

  6.   

    字符串内容比较用equals()方法
      

  7.   

    比较内容的时候还用equals()方法
      

  8.   

    1,true
    2,false
    个人觉的
      

  9.   

    还有没有其他的不同意见啊,拉拉是头猪说的对,我是问那两个方法是不是都生成同一块内存?为什么后面一个不是?final常量作优化是什么意思啊?
      

  10.   

    我是问那两个方法是不是都生成同一块内存?
    ====
    不是为什么后面一个不是?
    ====
    后面一个先生成一个string对象"length: " 地址为A,再生成一个string对象pig.length()
    ,地址为B,然后再连接这两个字符串,得到新的一个字符串,地址为C,最后将C传给dog,并设dog为不可更改final常量作优化是什么意思啊?
    ====
    对于1,编译器先看是否已经有了"length: 10",发现没有,于是编译器生成一个内容为"length: 10"的字符串,将其引用A传给pig。
    这时执行到dog那句,编译器先看是否已经有了"length: 10",发现有了,于是直接将A赋给dog,而不再生成新的临时变量了