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

你可能感兴趣的文章
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>
MuseTalk如何生成高质量视频(使用技巧)
查看>>
mutiplemap 总结
查看>>
MySQL DELETE 表别名问题
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>