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

你可能感兴趣的文章
mabatis 中出现&lt; 以及&gt; 代表什么意思?
查看>>
Mac book pro打开docker出现The data couldn’t be read because it is missing
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>