1.Java中equal和==的区别是什么?
public class Test1{ public static void main(String args[]){ String a="1234"; String b="1234"; String c = new String("1234"); System.out.println(a==b); System.out.println(a==c); System.out.println(a.equals(c)); } }
- true false true
- true true false
- true false false
- true true true
答案:A
equal:是用来比较两个对象内部的内容是否相等的。
==:是用来判断两个对象的地址是否相同,即是否是指向同一个对象。
new一个就是新地址
以下程序段的输出结果为:
public class EqualsMethod { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.print(n1 == n2); System.out.print(","); System.out.println(n1 != n2); } }
- false,false
- false,true
- true,false
- true,true
答案:B
因为两次new() 分出的内存也不同
2.在jdk1.5的环境下,有如下4条语句:
Integer i01 = 59; int i02 = 59; Integer i03 =Integer.valueOf(59); Integer i04 = new Integer(59)。
以下输出结果为false的是:
- System.out.println(i01== i02);
- System.out.println(i01== i03);
- System.out.println(i03== i04);
- System.out.println(i02== i04);
答案:C
JVM中一个字节以下的整型数据会在JVM启动的时候加载进内存,除非用new Integer()显式的创建对象,否则都是同一个对象
所有只有i04是一个新对象,其他都是同一个对象。所有A,B选项为true
C选项i03和i04是两个不同的对象,返回false
D选项i02是基本数据类型,比较的时候比较的是数值,返回true 。有基本数据类型的比较的都是值。
3.根据下面的程序代码,哪些选项的值返回true?
public class Square { long width; public Square(long l) { width = l; } public static void main(String arg[]) { Square a, b, c; a = new Square(42L); b = new Square(42L); c = b; long s = 42L; } }
- a == b
- s == a
- b == c
- a.equals(s)
答案:C
a = new Square(42L); b = new Square(42L);这里new了两个对象,所以a,b不是同一个引用a!=b
s的类型跟a,b不同类型,所以s!=a,s!=b
c = b;这里b,c是同一个对象的引用,所以b==c是true