java面试题汇总(一),java面试经典题目
一、与的区别
(推荐学习:java面试问题)
运算符有两种用法:
(1)一点一点地和;
(2)逻辑与。
运算符是一种短路AND(或简洁AND)运算。逻辑and和短路AND的区别是巨大的,虽然两者都要求运算符左右两端的布尔值为真,这样整个表达式的值为真。
之所以称之为短路运算是因为如果左边表达式的值为false,右边的表达式将直接短路而不进行运算。很多时候我们可能需要使用而不是。
比如验证用户登录时,确定用户名不为null,不为空字符串,应该写成username!=null!Username.equals( ),两者的顺序不能互换,更不用说运算符了,因为如果第一个条件不成立,字符串的equals比较根本无法进行,否则会产生NullPointerException。
二、用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
当使用final关键字修饰变量时,意味着被引用的变量不能改变,但被引用的变量所指向的对象中的内容仍然可以改变。
示例:
公共类测试10 {
//final修改基本类型的变量
public static final CHAR CHAR= medium ;
//final修改引用类型的变量
public static final string buffer a=new string buffer( string buffer );
公共静态void main(String[] args) {
//编译错误,无法更改引用
//a=new StringBuffer(呵呵);
//引用变量指向的对象中的内容仍然可以更改
a . append( XXX );
}
public static int方法1(final int i) {
//I=I 1;//编译错误,因为final修改了基本类型的变量。
返回I;
}
//当有人定义方法的参数(引用变量)时,他们可能希望采用以下形式来防止方法在内部修改传入的参数对象,
//其实这个做不到。下面的代码仍然可以添加到这个方法中来修改参数对象。
公共静态void方法2(最终StringBuffer buffer) {
buffer . append( buffer );//编译通过,因为final修饰了一个引用类型的变量。
}
}三、静态变量和实例变量的区别?
语法差异:静态变量需要用static关键字修饰,但实例变量不需要。
程序在运行时的区别:静态变量从属于类,实例变量从属于对象。
实例变量必须创建一个实例对象,在该实例对象中,实例变量将被分配空间,然后才能使用;
静态变量是类别数量。只要程序加载了类的字节码,静态变量就会被分配空间并可以使用。
综上所述,实例变量必须通过这个对象来创建和使用,静态变量可以直接被类名引用。
注意:(静态)静态变量的使用也是有限制的。不能在静态方法中调用类中的非静态方法和变量。静态修改的变量在类被加载后在内存中只有一个内存空间,它可以被一个类的所有实例对象共享。
四、是否可以从一个 static 方法内部发出对非 static 方法的调用?
你不能。
因为非静态方法与对象相关联,所以必须在对对象进行方法调用之前创建对象。但是,静态方法可以直接调用,无需创建对象。
也就是说,当调用静态方法时,可能还没有创建实例对象。如果从静态方法调用非静态方法,那么该非静态方法与哪个对象相关联?这个逻辑不能成立,所以静态方法在内部发出对非静态方法的调用。
五、"=="和 equals 方法究竟有什么区别?
==运算符用于比较两个变量的值,即比较变量对应的内存中存储的值。如果要比较两个基本类型的数据或两个引用变量是否相等,只能使用==运算符。
Equals方法用于比较两个独立对象的内容是否相同,就像比较两本书一样。它比较的两个对象是独立的。
代码示例:
String a=新字符串( AA );
String b=新字符串( AA );
system . out . println(a==b);
system . out . println(a . equals(b));两个新语句创建两个对象,然后用两个变量A和B指向其中一个,这是两个不同的对象,它们的第一个地址不同,也就是A和B中存储的值不同,所以表达式a==b会返回false。并且两个对象中的内容是相同的,所以a,equals(b)返回true。
注意:字符串的比较基本上使用equals方法。
如果一个类没有自己定义的equals方法,那么ta将继承Object类的equals方法。Object类的实现代码如下:
布尔等于(对象o)
{
return this==o;
}这说明如果一个类没有自己定义的equals方法,那么它默认的equals方法相当于使用了==运算符,也就是比较两个变量指向的对象是同一个对象。这时候用equals和==会得到同样的结果。如果您想编写一个可以比较两个实例对象内容的类,您需要重写equals方法。这就是java经典面试问题的细节(1)。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。