1.下面代码的输出结果是(A)
public class Test {
public static void main(String[] args) {
Integer n1 = 30, n2 = 30,n3 = 130, n4 = 130;
System.out.println(n1 == n2);
System.out.println(n3 == n4);
}
}
A. true,false B. true,true C. false,false D. false,true
解析:首先对于基本数据类型==是值的比较,而对于引用数据类型==是地址的比较 ,查看底层代码可知当数在-128---127之间的时候不会new出新的Integer对象,所以n1==n2是值的比较故输出true。Interger是int的封装类属于引用数据类型,所以每创建一个对象都会在堆内存划分一块新的空间,所以n3==n4为false。
2.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?(BC)
A. 11 B. 12
C. -11 D. -12
解析:简单来说当括号里边数的小数位是5,那么不管这个数是正数还是负数直接给这个数加上0.5。如果小数位不是5按照四舍六入。
3.把正确的选项填入括号里(A)
public class Test {
public static void main(String[] args) {
short n1,n2,n3;
n1=1;
n2=2;
n3=n1+n2;
System.out.println(n3);
}
}
A. 编译报错 B. 运行报错
C. 输出3
解析:byte,short,char不管单独运算还是混合运算都会先转化成int,所以n1+n2的结果是int类型而n3是short类型,所以无法直接赋值,想要赋值必须进行强转n3=(short)(n1+n2)。
4.两个对象M和N值相同(M.equals(N) == true),下列说法正确的是()
A. M,N的hash值不一定相同 B. M,N的hash值一定相同
C. 如果M,N的hash值相同那么M.equals(N) == true一定成立
D. 如果M,N的hash值相同那么M.equals(N) == true不一定成立
解析:如果两个对象的equals方法返回值为true那么他们的hashCode值一定相同,如果他们的hashCode值相等,那这两个对象不一定相等。相当于一对多的关系,一个hashCode值可以对应多个对象,但是一个对象只对应一个hashCode值。
5.下面代码输出的结果为(D)
String s1 = "Study";
String s2 = new String("Study");
String s3 = "Stu" + "dy";
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1 == s1.intern());
A. true,true,false B. false,true,false
C. true,false,false D. false,true,true
解析:对于String s1= “Study”jvm会在常量池中开辟一块空间存放“Study”;
String str2 = new String("Study") 会先在常量池中开辟一块空间存放“Study”,然后在堆内存new出一块空间存放“Study”,最后在栈内存中存放指向堆内存的地址。所以s1==s2返回值是false。对于String s3 = "Stu" + "dy" jvm会去常量池查找拼接后的字符串所以s1==s3为true。对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。所以同一个对象他们的equals方法返回值必定为true,所以s1 == s1.intern()为true。
6.下面代码输出的数字为(A)
int i=1;
i=i++;
int j=i++;
int k=i+ ++i*i++;
System.out.println(i);
System.out.println(j);
System.out.println(k);
A. 4,1,11 B. 4,2,11 C. 5,2,11 D.5,1,11
解析:i++是先赋值后自增,++i是先自增后赋值