public class test
{
  private static String s="string";
 public static void main(String a[])
{
  String t="strin"+“g”;
 System.out.println(s==t);
}
}
不运行,你说结果应该是啥?给出详细答案。我实在是不明白呀!

解决方案 »

  1.   

    String t="strin"+“g”; 
    能運行嗎?
    通不過吧
      

  2.   

    如果能的話
    應該是true   應為兩個value都是string
      

  3.   

    總覺得通不過
    有誰去運行過的告訴下
    我懶得開eclipse了。。
      

  4.   

    编译不能通过吧,“g”  --->  "g"  ?
      

  5.   

    搞什么啊
    就算是
    String t="strin"+"g"; 
    這樣也是通不過的吧。。 
      

  6.   

    笔误写出了中文的了
    应该是:String t="strin"+"g";
     System.out.println(s==t); 我这里就是不明白s和t怎么是同一个对象呢,因为==比较的内存地址吧。
    高手给指点下,谢谢。
      

  7.   

    如楼主说的==比较的是内存地址,
    +连接符连接2个字符串之后就会形成一个新的string对象,
    与直接用=赋值给一个string对象还是有区别的.
    所以是不会相等的.
      

  8.   

    这个是因为java的常量池的原因。java不会去生成新的string类型。
    看来你给的分太少,大家都着急要分,这个帖子就没有人看了。
      

  9.   

    “==”是比较的两个引用的内存地址,但是这里返回的应该是true
    由于s和t实际上都是对于常量string的引用,因此他们的地址是相同的
    如果你把第一句改为
    private static String s = new String("string");
    则会返回false,因为上面的s是对一个值为string的String对象的引用。
      

  10.   

    我还是趋向于8楼的说法,java常量池的原因,但是我还是有一个疑问,
    在String t="strin"+"g";运算的时候应该是引入了一个StringBuffer吧,
    最后是调用StringBuffer的toString方法返回一个值给t。
    但是我看源码StringBuffer的toString方法是new一个对象public synchronized String toString() {
    return new String(value, 0, count);
        }晕了呀,谁能说说+号运算是咋回事。
      

  11.   

    这和+运算符没关系啊!
    首先是到java常量池中去寻找,如果有的话就不用到堆内存去开配新空间.没有的的话就开配新空间并且指向他.
    “==”是比较的两个引用的内存地址,所以这里返回的应该是true 
    由于s和t实际上都是对于常量string的引用,因此他们的地址是相同的