java面试题汇总(一),java面试经典题目

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: