a1==a2  的返回值就是true

解决方案 »

  1.   


    System.out.println(a1.endsWith(a2)); 
    的效果一样!
      

  2.   

    是不是这样的,String a1,a2时,只是定义了a1,a2是String的数据类型,和int,double一样的,它们是变量,这样当然“==”时是TRUE。如果String a1=new String("1");
    String a2=new String("1");时,给他们分配了地址,
    这时“==”是计算他们的地址是否一致,而equals则是
    计算他们的值是否相等……
      

  3.   

    这是String特殊的地方.看看相关的书吧,都有解释的。
      

  4.   

    laughing说的有理!
    我的测试:
    代码1、
    String a1="1";
    String a2="1";
    System.out.println(a1==a2); 
    System.out.println(a1.endsWith(a2)); 
       结果为:true
              true
    代码2、
    String a1=new String("1");
    String a2=new String("1");
    System.out.println(a1==a2); 
    System.out.println(a1.endsWith(a2)); 
    结果为:  false
              true
      

  5.   

    嗯...有道理。可是这样说就表明:当我用String a="1"时,不分配地址了?那是怎么实现的?
      

  6.   


    实际上是这样的java中间会有一种字符串共用的技术,就是说如果用new String生成一个字符串,可能会预先查找内存,如果内存中存在相同的字符串,他就会指向这个字符串,但是这个不是很稳定,所以使用==比较时,可能会相等,也可能返回false这就是sun规定使用equals比较字符串的原因
      

  7.   

    而且据"Thinking in java "说:当用到下列代码时,会新生成"2"的对象:String a = "1";
    a+="2";这岂不是说明当用到"2"这种常量,会分配地址给它?
      

  8.   

    sure!
    the sentence is to judge whether the two varibles is equal.the result is a boolean
      

  9.   

    应该这样:
    String a1="1";
    String a2="1";System.out.println(a1.equals(a2));
      

  10.   

    用 srting.equal() 比较 字符串的 知
    == 用来比较 两个 string对象是不是相等
      

  11.   

    "string对象是不是相等 "是不是对象的地址呢?还有其他的相等吗?
      

  12.   


    String a1="1";     实际上 a1 只是基本的数据类型;
    如果 String a1=new String("1");   那么 a1 是一个对象;所以用 == 符号来比较:基本数据类型的是值的比较,而对象是地址的比较。
      

  13.   

    String在JAVA中可是对象哦!String a1="1";
    String a2="1";
    a2只是对a1的引用,不信你把a1的值改改看!
      

  14.   

    String a1,a2时,只是定义了a1,a2是String的数据类型,和int,double如果String a1=new String("1");
    String a2=new String("1");时,给他们分配了地址,
    这时“==”是计算他们的地址是否一致,一般同样的程序有可能返回true,也会返回false
    用compareTo比较保险
      

  15.   

    不好意思,最后写错了!
    a1.equal(a2)应该是String值的比较,而a1==a2不仅要两个对象VALUE相等而且要指向同一地址,才会返回TRUE!
      

  16.   

    而且如果String a2="1";
    “1”在JVM中已经存在,那么a2就不会在开新的内存,否则会从新生成!除非用NEW
      

  17.   

    Compare with two strings:
    http://www.csdn.net/Expert/topic/421/421093.shtm
      

  18.   

    在jvm的缓冲池中,只存在一个“1”字符窜。这样可以节约jvm的资源。
      

  19.   

    lzc98211()说的对!!!!!!!!!!同意!!!!!!!!!!
      

  20.   

    String s1="a";
    String s2="a";
    String S3=s2;这里s1不等于s2  但是s2==s3
    但是三者值相等
      

  21.   

    String a1="1";
    String a2="1";程序编译的时候,在程序数据区开了一块内存存放“1”,然后a1指向它,a2也指向它。你用
    “==”比较a1, a2,当然是true了。如果String a1 = new String("1");
    String a2 = new String("1");
    程序编译的时候,在程序数据区开了一块内存存放“1”,然后新建一个String对象,用那块
    内存去初始化,让a1指向该String对象;再新建一个String对象,用那块内存去初始化,让a2
    指向第二个String对象;用“==”比较,则为false;
      

  22.   

    //那
    String a1="1";
    String a2="2";
    a2="1";
    System.out.println(a1==a2);
    //会有什么结果,又作何解释??
      

  23.   

    都是指向的同一个“1”。
    String是对象。
    如果要比值,用equal()方法更保险。
      

  24.   

    String 重定义了 Object.equals(Object obj)
    当两个引用类型比较时,如a1==a2,与a1.equals(a2)等同!Object实现的equals只a1和a2所指的对象相同的才会返回true,
    String实现的equals当a1与a2的字符相同时返同true顶上的结果之所以是true,不是String重载了"==", 而是String重定义了Object的equals()
      

  25.   

    是重载了!
    其他类也定义equals()之后调用“==”仍然是地址比较。
    java.lang.String类是特殊的的类,重载了
    “=”、“!=”、“>=”、“>”、“<”、“<=”、“+”运算符
      

  26.   

    是jvm做的优化,把A1,A2都指向了同一块内存地址.==比较的是A1,A2的内存地址.
    ruguo
      

  27.   

    是jvm做的优化,把A1,A2都指向了同一块内存地址.==比较的是A1,A2的内存.
    如果用NEW,JVM就会另外开辟内存空间了.
      

  28.   

    a1==a2是个逻辑表达式。返回的自然是逻辑值了。
    不管a1 a2是什么。
      

  29.   

    CString 重载了Operator '=='!
      

  30.   

    遗弃Java和C#,intel拥抱“IT语言”intel要杀入软件领域,现在正在加紧研制新的编程语言,名字要IT语言!
    据初步认定,语法跟Java,C#类似,又是一个C的孙子!
    IT语言原来的名字叫Itanium,本来打算和它同名的CPU一起推出,后来吸收了Inprise公司(大名鼎鼎的Turbo)一起干,所以才改名了,这个新名字充分暴露了Intel和Turbo的狂妄野心!
    不过据介绍,IT语言真可能是名副其实,包罗万象,“用类似于C++的而且更精炼的语法十分优雅地展现了面向对象、泛型、并行、分布式、数据流等语言界流行的和最新的优秀成果”。
    据吹,IT的性能在普通CPU上和C++相当,在超线程CPU或多CPU上所向披靡,Java和C#真实望尘莫及。
    在C的400年辉煌之后,现在象个三国时代(C++,Java,C#),不知道IT是否真的能一统天下呢?或者它的寿命也象晋朝一样短暂?想当初m$凭借一个破操作系统控制了桌面,这个intel不会凭借cpu优势连操作系统也吞了吧?
    忘记java和C#吧,直接从C++转入IT?
    我们拭目以待。
      

  31.   

    遗弃Java和C#,intel拥抱“IT语言”intel要杀入软件领域,现在正在加紧研制新的编程语言,名字要IT语言!
    据初步认定,语法跟Java,C#类似,又是一个C的孙子!
    IT语言原来的名字叫Itanium,本来打算和它同名的CPU一起推出,后来吸收了Inprise公司(大名鼎鼎的Turbo)一起干,所以才改名了,这个新名字充分暴露了Intel和Turbo的狂妄野心!
    不过据介绍,IT语言真可能是名副其实,包罗万象,“用类似于C++的而且更精炼的语法十分优雅地展现了面向对象、泛型、并行、分布式、数据流等语言界流行的和最新的优秀成果”。
    据吹,IT的性能在普通CPU上和C++相当,在超线程CPU或多CPU上所向披靡,Java和C#真实望尘莫及。
    在C的400年辉煌之后,现在象个三国时代(C++,Java,C#),不知道IT是否真的能一统天下呢?或者它的寿命也象晋朝一样短暂?想当初m$凭借一个破操作系统控制了桌面,这个intel不会凭借cpu优势连操作系统也吞了吧?
    忘记java和C#吧,直接从C++转入IT?
    我们拭目以待。
      

  32.   

    String a1="1";
    String a2="1";
    中a1和a2都是字符串,都分配地址空间
    在System.out.println(a1==a2);
    中java处理的时候把“a1==a2”做为一个表达式处理了,由于a1和a2的值都为“1”所以这个表达式的值为true,而不会是“a1==a2”。
    Sysetem.out.println("a1==a2");
      

  33.   

    (string1==string2)是对这两个参数的比较!是一个boolean值!大家说的很好了!你应该明白了吧!
      

  34.   

    String 对象没有重载 == ,
    我有老婆 说的很对
    你们去考scjp吧,考了以后就不会问这种问题了。
      

  35.   

    hyhong_h(黄黄) 都说了,我就不说了
      

  36.   

    顺便提醒大家一句
    String.hashcode()也被重载了,所以虽然两个String对象地址不同,但只要内容相同,hashcode也是一样的
      

  37.   

    jvm使用了string pool技术的原因。