String a = "test"; 
String c = "te"+"st"; 
a==c 是等于 true 还是等于   false
为什么?

解决方案 »

  1.   

    true
    String s="string", string被保存在常量池中,之后指向string的引用都指向该字符串在常量池的入口
    String a = "test"; 
    String c = "te"+"st"; 
    这里总共产生了3个string对象,test,te,st,a和c都指向test
      

  2.   

    true,a和c都指向同一个对象“test”,String直接赋值的话,它是先去内存里找是否存在该对象,c的时候已经有“test”,就不再去创建新的对象了,看过设计模式的享元模式没,同一个道理
      

  3.   

    当然是true 了
    上面两个大侠说的对,
    如果在定义的时候用String c=new String("test")那么这两个值就不相等了。因为在new 的过程中就会新建一个对象
      

  4.   

    一定是true
    ps答对了的要给分哦
      

  5.   

    true
      常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
      

  6.   

    字符串字面量在java中是经过优化的;如果使用字面量创建一个字符串,然后将相同的字符串内容来创建它时,java就返回原来的String对象,这样,两个字符串将是同以个对象(a和c是同以各对象),并没有创建两个不同的对象所以是 ture
      

  7.   

    就是上面高手说的;在java中的堆栈中是对象共享,如果在堆栈中创建一个新对象,它要先查找是否存在一个相同的值,如果有则共享,反之则新创建,
    但是用new 在堆中则一定创建一个新的,不共享对象
      

  8.   

    public class StringTest{
    public static void main(String []args){
    String a = "test"; 
                      String c = "te"+"st"; 
    if(a==c)
                System.out.println("a==c!");
    if(a.equals(c))
                System.out.println("a.equals(c)!");
    }
    }
    用它以测试就知道,确实是 true
    但是String a = "test"; 
        String c = "te"+"st"; 有很大的差距String a = "test"; 创建了两个对象
       而String c = "te"+"st"; 创建了三个对象
      

  9.   

    我测试怎么2个out都给输出来了啊!
    用==来比较是比较是否指向同一个对象,那应该比较对象a和c是否相等吧!
    用equals()方法是比较内容,那应该比较字符串"test"和"te"+"st"是否相等吧!
    你说String a="test"是那2个对象啊?
    String c="te"+"st"是那3个对象啊?
      

  10.   

    String a = "test"; 一个"test",另一个是指向"test"的引用对象a
    String c="te"+"st";一个"te",一个"st",另一个是指向"test"的引用对象c
      

  11.   

    ==是用于基本内型的比较!!在你上面定义的两个字面量(所说的常量),他们在同在一个存储里!!两个都是一个地方的!!!而EQULAS是用与比较内容的!!用于对象的比较!!比较内容的!!
    你和你弟弟是一个妈生的!!可是毕竟你还是你  你弟弟还是你弟弟不是同一个人@!! 
    叫你的名字!!比如你叫张三  张三就是你 你就是张三 都是同一个人!!
    提倡 用对象比较!~!!同是顶上面的!!
      

  12.   

    设计模式之享元(FlyWeight),去看看吧,也许现在你还看不懂,但你会有那种意识的.