public class Sample {
long length; public Sample(long l) {
length = l;
} public static void main(String[] args) {
Sample s1, s2, s3;
s1 = new Sample(21L);
s2 = new Sample(21L);
s3 = s2;
long m = 21L;


问下面表达式哪个返回true??
A:s1 == s2;
B:s2 != s2;
C:m == s1;
D:s1.equals(m);

解决方案 »

  1.   

    A:s1 == s2;
    B:s2 != s2;
    C:m == s1;
    D:s1.equals(m);
    因为s1 和 s2的堆地址不同,所以返回false. 同样的,s2和s2本身肯定相同,所以返回false.
    m 是基本数据库类型,而s1则不是,所以他们俩是不具可比性的.同样的道理D里的也不具可比性!
      

  2.   

    s1和s2是指向两个不同的sample类的对象引用,所以s1和s2不会相等的,也就是s1==s2返回false;
      m为long类型数据,不能和sample类型直接用==比较,所以不能通过编译;
      equals(ojecct)方法中的参数要求是对象,而long类型的m不是对象,所以也不能通过编译。
      

  3.   

    答案B我输入错误,应该是:s2!=s3
    :),太不认真了
      

  4.   

    那这个呢??public class MyClass {
    static String s1 = "I am unique!"; public static void main(String args[]) {
    String s2 = "I am unique!";
    String s3 = new String(s1);
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    System.out.println(s3 == s1);
    System.out.println(s3.equals(s1));
    System.out.println(TestClass.s4 == s1);
    }
    }class TestClass {
    static String s4 = "I am unique!";
    }
      

  5.   

    ==是比较两个引用是否指向同一个String对象,而String的equals方法是比较两个引用所指对象的字符串内容是否相同。s1和s2为什么指向同一对象,楼主可搜一下关于字符传的讨论文章。
      

  6.   

    结果
    true //系统为S1分配一静态空间存储字串"I am unique!",在程序运行期间不变;s2被直接指
           向字串“I am unique!”,即s1与s2是指向同一块内存地址,而且内容一样,所以他们
           虽然名字不同,确是同一对象,如同一个人有两个名字。
    true //不用多说吧,类变量的值比较,值相同,返回true
    false//s3是动态生成的,系统从新分配一段空间存放s1对应的字串,所以s3,s1的值相同,但却
         是不同的两个对象,‘==’比较当然是false
    true//……不多说了
    true//这个静态初始化,有点晕,大家讨论
      

  7.   

    TestClass.s4 == s1 如果这个是true那么说明,在某个类中,静态变量只存在一个,哪怕你是从别的类引用的。
      

  8.   

    s2!=s3 返回ture?????
    不对的吧!!
      

  9.   

    楼主你是考人呢,还是自己问,自己问的话,先搞情况==和equals的区别,题目变来变去,就那个样子,分析一下就知道了。对String那部分s1和s2,看看String的书都会提到,他们用的是一个对象
    最后一个,是因为String 创建的时候,是在java的容器里进行的,而不是根据内来分的,和s1==s2是一样的道理
      

  10.   

    s2!=s3 就是返回true
    没错^_^
      

  11.   

    对,s2!=s3 就是返回true
      

  12.   

    www.source520.com     免费免注册80G源码书籍下载
      

  13.   

    楼上各位是甘愿被楼主耍还是也喜欢耍人呢?s2!=s3  结果显然是 false
      

  14.   

    这个问题真的很奇怪
    第一个例子S2和S2指向的是同一个字符串,但S2!=S3返回的是true,说明比较的是S2和S3的地址,而不是指向的对象。
    但第二个例子中S1==S3返回true就让人搞不明白了,那位大哥给讲讲啊
      

  15.   

    A:s1 == s2;
    B:s2 != s3;
    C:m == s1;
    D:s1.equals(m);
    都返回错误
    s1和s2是指向两个不同的sample类的对象引用,所以s1和s2不会相等的
    m为long类型数据,不能和sample类型直接用==比较,所以不能通过编译;
      

  16.   

    A:s1 == s2;
    B:s2 != s3;
    C:m == s1;
    D:s1.equals(m);结果:
    false
    false
    error  编译错误
    error  编译错误
    同意zxjoe(joe)的说法。
      

  17.   

    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    System.out.println(s3 == s1);
    System.out.println(s3.equals(s1));
    System.out.println(TestClass.s4 == s1);
    结果:
    true 
    true 
    false
    true 
    true 
    同意cs_winner(翼)的说法。
      

  18.   

    拜托,编译运行一下再说,明明S2!=S3,就有一群人都说S2=S3,对待问题要严谨,不要想当然
      

  19.   

    vintager4(泥巴)   第一段代码中S2==S3是正确的   不然S2!=S3怎么会是false呢  你说反了吧