博客
关于我
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/

你可能感兴趣的文章
npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
查看>>
npm install CERT_HAS_EXPIRED解决方法
查看>>
npm install digital envelope routines::unsupported解决方法
查看>>
npm install 卡着不动的解决方法
查看>>
npm install 报错 EEXIST File exists 的解决方法
查看>>
npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
查看>>
npm install 报错 Failed to connect to github.com port 443 的解决方法
查看>>
npm install 报错 fatal: unable to connect to github.com 的解决方法
查看>>
npm install 报错 no such file or directory 的解决方法
查看>>
npm install 权限问题
查看>>
npm install报错,证书验证失败unable to get local issuer certificate
查看>>
npm install无法生成node_modules的解决方法
查看>>
npm install的--save和--save-dev使用说明
查看>>
npm node pm2相关问题
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm run build报Cannot find module错误的解决方法
查看>>
npm run build部署到云服务器中的Nginx(图文配置)
查看>>
npm run dev 和npm dev、npm run start和npm start、npm run serve和npm serve等的区别
查看>>
npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
查看>>
npm scripts 使用指南
查看>>