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

你可能感兴趣的文章
nacos本地可以,上服务器报错
查看>>
Nacos注册中心有几种调用方式?
查看>>
nacos注册失败,Feign调用失败,feign无法注入成我们的bean对象
查看>>
nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)
查看>>
Nacos简介、下载与配置持久化到Mysql
查看>>
Nacos简介和控制台服务安装
查看>>
Nacos管理界面详细介绍
查看>>
Nacos编译报错NacosException: endpoint is blank
查看>>
nacos自动刷新配置
查看>>
nacos运行报错问题之一
查看>>
Nacos部署中的一些常见问题汇总
查看>>
NACOS部署,微服务框架之NACOS-单机、集群方式部署
查看>>
Nacos配置Mysql数据库
查看>>
Nacos配置中心中配置文件的创建、微服务读取nacos配置中心
查看>>
Nacos配置中心集群原理及源码分析
查看>>
nacos配置在代码中如何引用
查看>>
nacos配置新增不成功
查看>>
nacos配置自动刷新源码解析
查看>>
Nacos集群搭建
查看>>
nacos集群搭建
查看>>