11、"=="和equals方法究竟有什么区别?
"=="操作符专门用来比较两个变量的值是否相等,比较变量对应的内存中所存储的数值是否相同。要比较两个基本类型的数据或两个引用类型的变量,只能用"=="操作符。
如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占一块内存,
例如 Object obj =
new Object();变量obj是一个内存,new Object()
是另一个内存。此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。
对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,用"=="操作符。
equals方法是用于比较两个独立对象的内容是否相同,例如:String a = new String("foo"); String b = new String("foo");
两条new语句创建了两个对象,让后用a/b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以
表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
12、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
静态变量不属于某个实例对象,而属于类,所以也称为类变量,
只要程序加载了类的字节码,不用创建任何实例对象。静态变量就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
13、是否可以从一个static方法内部发出对非static方法的调用?
可以。可以在static方法内部构造一个实例化对象,让后通过对象去调用非static方法。
public class CharNum { public static void A(){ CharNum c = new CharNum(); System.out.println(c.B()); } public int B(){ int i = 88; return i; } public static void main(String[] args) { CharNum.A(); } }
14、Integer和int的区别
int是java提供的8种基本数据类型之一。Integer是java为int提供的封装类。
int的默认值为0,而Integer的默认值是null,即Integer能区分出 未赋值和赋值为0的区别。
例如:想要表达出没有参加考试和考试成绩为0的区别,只能用Integer。
在jsp开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串。而int的默认值为0,显示为0。
所以int不适合作为web层的表单数据的类型。
在Hibernate中,如果OID定义为Integer类型,那么Hibernate就可以根据其值是否为null 而判断一个对象是否是临时的
如果将 OID 定义为了 int 类型,还需要在 hbm 映射文件中设置其 unsaved-value 属性为0。
另外,Integer提供了多个与整数相关的操作方法。例如,将一个字符串转化为整数,Integer中还定义了表示整数的最大值和最小值的常量。
15、Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
Math类中提供了三个与取整有关的方法:ceil、floor、round
ceil是上取整:Math.ceil(11.3)结果是 12,Math.ceil(-11.3)结果是 -11
floor是向下取整:Math.floor(11.3)结果是 11 ,Math.floor(-11.3)结果是 -12
round是"四舍五入":Math.round(11.5) 结果是 12 ,Math.round(-11.5)结果是 -11。
算法为 Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整
16、下面的代码有什么不妥之处?
1. if(username.equals(“zxx”){} username 可能为 NULL,会报空指针错误;改为"zxx".equals(username)
2. int x =
1;
return
x==1?true:false; 这个改成
return x==1;就可以!
17、请说出作用域 public, private, protected,以及不写时的区别?
18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload是重载的意思,Override是覆盖的意思。也就是重写。
重载Overload表示同一个类中可以有多个名称相同的方法,但是这些方法的参数列表各不相同。
重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中定义的方法。相当与把父类中的方法覆盖掉了。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是父类异常的子异常。子类方法的访问权限只能比父类的更大。
至于Overloaded的方法是否可以改变返回参数类型,如果方法的参数不一样,返回类型可以不一样。但是参数一样,返回类型不一样,这样是不构成重载的。
19、构造器Construcor是否可被override?
构造器 Constructor 不能被继承,因此不能重写 Override ,但可以被重载 Overload 。
20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main方法?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的 main 方法。
原文:http://www.cnblogs.com/Everyjoy/p/3566153.html