答:(1):对于基本数据类型,只能使用"==";
(2):对于引用类型,使用"=="相当于比较两边的对象是否是同一个对象,使用equals方法相当于比较两个对象的内容是否一致。例如:
String str1 = new String("I love java");
String str2 = new String("I love java");
System.out.prinln(str1 == str2);//false,因为str1和str2分别引用了不同的对象。
System.out.println(str1.equals(str2));//true,因为str1和str2,它们所引用的对象里面的内容一样。
(3):对于自定义的类,系统默认是继承了Object的equals方法,而这个默认的方法就是使用了==操作符,也就是判断两个引用变量引用的是否是同一个对象,这个时候使用==和使用equals得到的结果是相同的。所以,一般应用中都要重写equals方法。
2、静态变量和实例变量的区别?
答:(1):静态变量和实例变量都是类的成员变量,在语法上,静态变量前要加static,而实例变量前不加。
(2):实例变量属于对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量,它必须通过实例变量来引用。
(3):静态变量属于类,它不属于某个实例对象,只要程序加载了类的字节码,静态变量就会被分配空间,它可以直接使用类名来引用。
例如:
public class Demo6 {
public static void main(String[] args) {
Fruit f1 = new Fruit();
System.out.println(f1);//count = 1 num = 1
Fruit f2 = new Fruit();
System.out.println(f2);//count = 2 num = 1
Fruit f3 = new Fruit();
System.out.println(f3);//count = 3 num = 1
Fruit f4 = new Fruit();
System.out.println(f4);//count = 4 num = 1
Fruit f5 = new Fruit();
System.out.println(f5);//count = 5 num = 1
System.out.println(f5.num);//num是实例变量,只能通过实例对象以及该对象的引用变量来引用
System.out.println(Fruit.count);//count是静态变量,能通过类名来引用
}
}
class Fruit {
static int count;//静态变量
int num;//实例变量
public Fruit() {
count++;
num++;
}
public String toString() {
String str = "count: " + count + " num: " + num;
return str;
}
}
3:是否可以从一个static方法内部发出对非static方法的调用?
答:不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用式不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何的实例对象,如果从一个static方法中发出对非static方法的调用,那么非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以一个static方法内部不可以直接调用非static方法。
4:Integer与int的区别?
答:(1):int是java提供的8种基本类型之一,Integer是java为int提供的包装类。
(2):int的默认值是0,Integer的默认值是null。也就是说,Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0,则只能选择Integer。
(3):Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数最大值和最小值的常量。
5:Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
答:round方法,表示“四舍五入”,算法为Math.floor(x + 0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果是12,Math.round(-11.5)的结果是-11。
顺便提一句,Math类中提供了三个与取整有关的方法:floor、ceil、round。其中,floor是向下取整,所以,Math.floor(11.5)的结果是11.0,Math.floor(-11.5)的结果是-12.0。ceil是向上取整,所以,Math.ceil(11.5)的结果是12.0,Math.ceil(-11.5)的结果是-11.0。