1.面向对象的三大思想特征是什么?
答案:封装、继承、多态
2.下列选项中,那个选项的值为 true
public class Square { long width; public Square(long l) { width = l; } public static void main(String[] args) { // TODO Auto-generated method stub Square a,b,c; a = new Square(42L); b = new Square(42L); c = b; long s = 42L; } }
A: a == b; B: s == a; C: b == c; D:a.equals(s);
答案:C
分析:由代码可知,a、b、c、s四个变量的值如下:
a = 0x1 地址值为42L
b = 0x2 地址值为42L
c = 0x2 地址值为42L
(上述指向的地址为假设,实际并不一定指向此处)
s = 42L
A中 a 与 b 指向地址不同,错误
B中变量 s 是一个基本数据类型的变量 long,而变量 a 是一个对象引用类型的变量,基本数据类型和对象引用类型之间不能直接进行相等性比较,错误
C中 b 与 c 指向地址相同,正确
D中因为 a 是 Square 类型的对象,s 是 long 类型的基本数据类型,两者类型不同,无法进行比较
3.简述java中==和equals的区别
答案:== 运算符用于比较两个对象的引用是否相等,即他们是否指向同一个内存地址,而不是比较他们的值是否相等
equals方法用于比较两个对象的实际内容是否相等,而不是比较他们的引用
4.下列代码的输出是什么?
public class Cow { public static void main(String[] args) { int n = 3; System.out.println("Before change, n = " + n); n = changeData(n); System.out.println("After changeData(n), n = " + n); } public static int changeData(int nn) { nn = 10; return nn; } }
答案:Before change, n = 3
After changeData(n), n = 10
分析:n 首先在main方法中被定义并赋值为3,然后输出Before change, n = 3;之后调用changeData方法将 n 作为参数传递给了changeData方法,changeDate方法的返回值10被赋予了n,因此输出After changeData(n), n = 10
5.下列代码输出是什么?
class Person{ private int id; private String name; public Person(int id,String name) { this.id = id; this.name = name; } } public class StudentClass { public static void main(String[] args) { Person a = new Person(23,"a"); Person b = new Person(22,"b"); swap(a, b); System.out.println(a == a); System.out.println(b == b); } private static void swap(Person a, Person b) { Person temp = a; a = b; b = temp; } }
答案:true
true
6.下列代码的输出什么?
public static void main(String[] args) { String astring = new String("123"); String bstring = new String("123"); System.out.println(astring==bstring); System.out.println(astring.equals(bstring)); }
答案:false
true
分析:第一个输出语句使用了"=="运算符,它用于比较两个对象是否是同一个对象,而astring和bstring是两个不同的对象,因此输出false
第二个输出语句使用了equals()方法,该方法用于比较两个对象的值是否相等,而astring和bstring的值都是"123",因此输出true
7.下列代码的输出什么?
public class Cat { public static void main(String[] args) { byte a = -5; System.out.println((a<<2)); } }
答案:-20
分析:位运算符<<表示左移操作,将一个数的二进制表示向左移动指定的位数,并补0;a的二进制表示为11111011(补码表示),左移2位后,变为11101100(补码表示),将结果转换为十进制数输出即为-20
8.下列代码的输出什么?
public static void main(String[] args) { byte a = -5; //1111 1011 int c = (a >> 2); System.out.println((byte) (a >> 2)); }
答案:-2
分析:位运算符>>表示右移操作,将一个数的二进制表示向右移动指定的位数,并补1;做题方法同上一题