博客
关于我
JavaSE面试题(三):JavaSE语法(1)
阅读量:756 次
发布时间:2019-03-21

本文共 1902 字,大约阅读时间需要 6 分钟。

Java 运算符与方法比较及多层循环控制

1. & 与 && 的区别

在 Java 中,&&& 是两个常用布尔运算符,但它们有着显著的区别。

  • &按位与运算符,它会对两个布尔值进行按位运算,结果只有所有位都为 true 时,才返回 true
  • &&短路与运算符,它的运算方式有所不同:在逻辑表达式中,只要左边的表达式为 false,右边的表达式就不会被执行。

逻辑与与短路与的区别

短路与运算的关键在于它能够节省资源,当左边表达式为 false 时,右边表达式不再执行。这在实际编程中非常有用,例如在进行字段 validated 时,避免因左边表达式失败而执行右边代码。

2. == 与 equals() 的区别

==equals() 是两个在 Java 中常用的比较运算符,但它们的作用和应用场景有明显不同。

equals() 与 == 的主要区别包括:

  • 类型== 是运算符,而 equals() 是一个方法。
  • 应用场景== 适用于比较基本数据类型或对象的地址值;equals() 用于比较两个对象或字符串内容是否相等。
  • 比较结果:对于对象或字符串,== 通常返回 false,除非它们指向相同的内存地址(即重量相同的情况下)。

equals() 与 == 的注意事项

  • 对于基本数据类型,== 比较的是数值相等,而 equals() 在相同数值的情况下可能需要比较类别和类型。
  • 重写 equals() 方法时,不要直接比较对象的地址,而是应该比较对象的状态或内容。

3. 多层嵌套循环的跳出方法

在 Java 中,面临多层嵌套循环时,可以通过以下两种方法跳出循环:

方法一:使用标记

标记可以通过给循环体添加一个明确的标识符,便于跳出特定的循环:

public static void main(String[] args) {    System.out.println("标记前");    outerLoop:    for (int i = 0; i < 10; i++) {        for (int j = 0; j < 10; j++) {            System.out.println("i=" + i + ",j=" + j);            if (j == 5) {                break outerLoop;            }        }    }    System.out.println("标记后");}

方法二:改变循环条件

通过改变外层循环的条件,使其能被内层循环的结果所控制:

public static void main(String[] args) {    System.out.println("标记前");    boolean flag = true;    for (int i = 0; i < 10; i++) {        for (int j = 0; j < 10 && flag; j++) {            System.out.println("i=" + i + ",j=" + j);            if (j == 5) {                flag = false;            }        }    }    System.out.println("标记后");}

4. 为什么重写 equals 必须重写 hashCode

在 Java 中,重写 equals() 方法 时,如果想要它能准确反映对象相等与否,必须重写 hashCode() 方法。这是因为:

  • hashCode() 用于计算对象的散列键,决定对象在哈希表中的存储位置。
  • 根据 Java 的合同(Java 运算符合约),如果两个对象的 equals() 方法返回 true,它们必须具有相同的 hashCode()
  • 如果没有重写 hashCode(),同一对象实例的 hashCode() 和其它对象可能不同,可能导致异常或逻辑错误。

5. Math.round(1.5) 返回值

Math.round(1.5) 的结果并不是 -1!这是一个常见的误区。round(a) 的作用是根据指定的浮点数进行“银行家轮”,即向最近的整数进位。

  • round(1.5) → 2
  • round(2.5) → 3
  • round(3.14) → 3

而 round(-1.5) → -1。这是因为 -1.5 距离 -1 比距离 -2 更近。

转载地址:http://azerz.baihongyu.com/

你可能感兴趣的文章
NuGet学习笔记001---了解使用NuGet给net快速获取引用
查看>>
nullnullHuge Pages
查看>>
NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null
查看>>
null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
查看>>
Numix Core 开源项目教程
查看>>
NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
查看>>
numpy 或 scipy 有哪些可能的计算可以返回 NaN?
查看>>
numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
查看>>
numpy 数组与矩阵的乘法理解
查看>>
NumPy 数组拼接方法-ChatGPT4o作答
查看>>
numpy 用法
查看>>
Numpy 科学计算库详解
查看>>
Numpy.fft.fft和numpy.fft.fftfreq有什么不同
查看>>
Numpy.ndarray对象不可调用
查看>>
Numpy如何使用np.umprod重写range函数中i的python
查看>>
numpy数组替换其中的值(如1替换为255)
查看>>
numpy数组索引-ChatGPT4o作答
查看>>
numpy转PIL 报错TypeError: Cannot handle this data type
查看>>
NutzCodeInsight 2.0.7 发布,为 nutz-sqltpl 提供友好的 ide 支持
查看>>
NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现
查看>>