### Java软件中级工程师笔试题-复杂逻辑知识点解析 #### 一、运算符优先级与自增自减操作 **题目1:** 给定代码片段中的`ret`变量的值是多少? ```java int k = 0; int ret = ++k + k++ + ++k + k; ``` **解析:** - `++k` 表示先加1后使用,而`k++`表示先使用后加1。 - `++k`执行后,`k`的值变为1。 - 接下来是`k++`,此时`k`为1,计算时使用的是1,之后`k`加1变为2。 - 第三个`++k`将`k`从2变为3。 - 最后的`k`使用了上一步的结果,即3。 因此,整个表达式可以转化为:`1 + 1 + 3 + 3`,最终`ret`的值为8。 --- #### 二、运算符的使用 **题目2:** 下面的代码分别输出什么? ```java int i1 = 10, i2 = 10; System.err.println("i1 + i2 = " + i1 + i2); System.err.println("i1 - i2 = " + i1 - i2); System.err.println("i1 * i2 = " + i1 * i2); System.err.println("i1 / i2 = " + i1 / i2); ``` **解析:** - 第一行中,`i1 + i2`在字符串连接之前被解释为两个整数相加,结果为20,因此输出为`i1 + i2 = 20`。 - 第二行中,`i1 - i2`直接进行数学运算,结果为0,因此输出为`i1 - i2 = 0`。 - 第三行中,`i1 * i2`直接进行数学运算,结果为100,因此输出为`i1 * i2 = 100`。 - 第四行中,`i1 / i2`直接进行数学运算,结果为1(整数除法),因此输出为`i1 / i2 = 1`。 --- #### 三、方法重载与null参数 **题目3:** 下面的代码会输出什么或抛出异常? ```java public void myMethod(String str) { System.err.println("string"); } public void myMethod(Object obj) { System.err.println("object"); } //... t.myMethod(null); ``` **解析:** - 在Java中,当方法参数为`null`时,会根据类型匹配最合适的重载方法。 - 这里`null`被视为`Object`类型的引用,因为`String`也是`Object`的一个子类。 - 因此,调用`myMethod(null)`时,会调用`myMethod(Object obj)`方法,并输出`object`。 --- #### 四、日期处理 **题目4:** 假设今天是9月8日,下面代码输出什么? ```java Date date = new Date(); System.err.println(date.getMonth() + " " + date.getDate()); ``` **解析:** - `date.getMonth()`返回的是月份,但是请注意,这个返回值是从0开始计数的,因此9月会被表示为8。 - `date.getDate()`返回的是一个月中的哪一天,即8。 - 整体输出为`8 8`。 --- #### 五、数学函数的应用 **题目5:** 下面代码的输出结果是什么? ```java double val = 11.5; System.err.println(Math.round(val)); System.err.println(Math.floor(val)); System.err.println(Math.ceil(val)); ``` **解析:** - `Math.round(val)`将`val`四舍五入到最近的整数,输出为12。 - `Math.floor(val)`返回不大于`val`的最大整数,输出为11。 - `Math.ceil(val)`返回不小于`val`的最小整数,输出为12。 --- #### 六、继承与多态 **题目6:** 下面代码的结果是什么? ```java public class Test extends Base { //... @Override public void method() { System.err.println("test"); } } class Base { public void method() throws InterruptedException { System.err.println("base"); } } //... b.method(); t.method(); ``` **解析:** - 当`b.method()`被调用时,`b`实际上是指向`Test`实例的`Base`类型引用,但因为没有重写基类的方法,所以会调用`Base`类中的`method`方法,输出`base`。 - 当`t.method()`被调用时,由于`t`是`Test`类型的实例,且`method`方法被重写了,因此会输出`test`。 --- #### 七、类和对象的信息获取 **题目7:** 以下代码的结果是什么? ```java public class Test extends Base { //... public void method() { System.err.println(super.getClass().getName()); System.err.println(this.getClass().getSuperclass().getName()); } } class Base {} ``` **解析:** - `super.getClass().getName()`返回`Base`类的全名,即`test.Base`(注意这里的`test`应该是包名)。 - `this.getClass().getSuperclass().getName()`同样返回`Base`类的全名,即`test.Base`。 --- #### 八、字符串和StringBuffer对象比较 **题目8:** true or false? ```java String str1 = new String("abc"); String str2 = new String("abc"); System.err.println(str1.equals(str2)); StringBuffer sb1 = new StringBuffer("abc"); StringBuffer sb2 = new StringBuffer("abc"); System.err.println(sb1.equals(sb2)); ``` **解析:** - 对于字符串`str1`和`str2`,尽管它们包含相同的字符序列,但由于都是通过`new String`创建的新对象,所以它们的引用不同。`str1.equals(str2)`会比较两个字符串的内容是否相同,这里会输出`true`。 - 对于`StringBuffer`对象`sb1`和`sb2`,`sb1.equals(sb2)`同样会比较两个对象的内容是否相同,但由于它们的内容确实相同,所以也会输出`true`。需要注意的是,对于`StringBuffer`来说,`equals`方法确实用于比较内容,与字符串对象相同。
- 粉丝: 30
- 资源: 5万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- IMG_20241019_203801_edit_288242973348204.jpg
- 基于Flink+Kafka的全链路数仓, 包括实时和离线详细文档+全部资料.zip
- 基于Flink的电商实时数据仓库项目详细文档+全部资料.zip
- 基于flink的电商实时数据分析、推荐、风控项目详细文档+全部资料.zip
- 华盈恒信—福建金辉房地产—1104培训体系研讨问题.doc
- 华盈恒信—福建金辉房地产—培训管理办法1116.doc
- 华盈恒信—福建金辉房地产—南国金辉售楼部培训考核问卷.doc
- 华盈恒信—福建金辉房地产—例:2001年应届毕业生进厂培训、实习计划.doc
- 基于Flink的车联网实时数据平台详细文档+全部资料.zip
- 基于Flink的练习项目详细文档+全部资料.zip
- 华盈恒信—金德精密—员工培训课程大纲.doc
- 基于Flink的批流处理实战案例详细文档+全部资料.zip
- 联纵智达-钱江啤酒—徐鹭钱啤区域经理培训纲要.doc
- 基于Flink的电影数据实时统计网站详细文档+全部资料.zip
- 基于flink的实时计算平台详细文档+全部资料.zip
- 基于flink的实时流计算web平台详细文档+全部资料.zip