java常见面试题1

面试题

简单但容易错的题

1.自增、自减 简单题目

// 部分代码,非可运行
int i = 1;
i = i++;
int j = i++;
int k = i+ ++i * i++;
//i=? j=? k=? 

这个题看着简单又凌乱的,重要的考点主要是以下几点:

“=” 右边是从左到右将加载值依次压入操作数栈;
自增自减直接修改变量的值,是在局部变量表中操作的,不经过操作数栈;
赋值是将操作数栈中的值赋给局部变量表中的,而且是最后计算的;
实际运算时,按运算符优先级计算,并将临时结果存储到操作数栈中;

题目解析:

int i = 1; 

i=1;暂不解释

i = i++; 

“=” 后面,从左到右将加载值依次压入操作数栈

步骤局部变量表操作数栈说明
1i=11将局部变量表中 i=1 的值压入操作数栈中(iload_i)
2i=21i++,i自增,局部变量表中的1加个1,变为2(iinc_i)
3i=1将操作数栈中的值赋到局部变量表,局部变量表中的2变为1(istore_i)

此时i的值为1;即i=1;
局部变量表中数据如下:

i
1

继续下一步运算

j = i++;

自增自减直接修改变量的值,是在局部变量表中操作的

步骤局部变量表操作数栈说明
1i=11将局部变量表中 i=1 的值压入操作数栈中(iload_i)
2i=21i++,i自增,局部变量表中的1加个1,变为2(iinc_i)
3j=1将操作数栈中的值赋到局部变量表,局部变量表中的j=1(istore_j)

此时i的值为2,即 i=2;j的值为1,即 j=1;
局部变量表中数据如下:

ij
21

再继续下一步运算

k = i+ ++i * i++;

实际运算时,按运算符优先级计算,并将临时结果存储到操作数栈中

步骤局部变量表操作数栈说明
1i=22将局部变量表中 i=2 的值压入操作数栈中(iload_i)
2i=32++i ,i自增,局部变量表中的2加个3,变为3(iinc_i);
3i=32,3从左到右将加载值依次压入操作数栈,将i的值压入操作数栈中,即 操作数栈又压入一个3(iload_i);
4i=32,3 ,3i++,将i的值压入操作数栈中,即 操作数栈又压入一个3(iload_i)
5i=42,3 ,3i++,i自增,局部变量表中的i加个1,变为4(iinc_i)
6i=42,9按运算符优先级计算,并将临时结果存储到操作数栈中(imul_i)
7i=411按运算符优先级计算,并将临时结果存储到操作数栈中(iadd_i)
8k=11将操作数栈中的值赋到局部变量表,局部变量表中的k=11(istore_k)

最终计算结果:

ijk
4111
// 部分代码,非可运行
int i = 1;
i = i++;
int j = i++;
int k = i+ ++i * i++;
//i=4 j=1 k=11 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧公厕的目的和意义是什么?

智慧公厕是近年来城市建设中的一项重要举措,其目的在于实现公共厕所的智慧化管理,为市民群众提供更好的服务体验,助力智慧城市和数字环卫的发展,提升社会公共卫生服务水平。 与此同时,智能公厕也具有重要的意义&#x…

C 语言简介

C 语言是一种通用的高级语言,最初是由丹尼斯里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。 在 1978 年,布莱恩柯林汉(Brian Kernighan)和丹尼斯里奇(D…

springboot+vue实现微信公众号扫码登录

通常在个人网站中,都会有各种第三方登录,其中微信登录需要认证才能使用,导致个人开发者不能进行使用此功能,但是我们可以使用微信公众号回复特定验证码来进行登录操作。 微信关键词处理 微信公众号关键词自动回复,具体…

60kW 可编程直流回馈负载箱的优势和特点

60kW可编程直流回馈负载箱是一种先进的电力设备,主要用于模拟电网中的负载,为电力系统提供稳定的负载环境。它具有许多优势和特点,使其在电力系统中得到了广泛的应用。 60kW可编程直流回馈负载箱具有高效的能源转换效率,能够将电能…

Object.groupBy分组方法

在某些浏览器的某些版本中,此方法被实现为 Array.prototype.group() 方法。由于 web 兼容性问题,它现在以静态方法实现。 函数功能 提供的回调函数返回的字符串值对给定可迭代对象中的元素进行分组。返回的对象具有每个组的单独属性,其中包…

代码随想录算法训练营第四十四天|518. 零钱兑换 II、377. 组合总和 Ⅳ

518. 零钱兑换 II 题目链接:零钱兑换 II 题目描述: 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设…

LQB新2024 DS18B20温度检测

温度检测 #include "stc15.h" #include <intrins.h> #include <stdio.h> #include <absacc.h> typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32;float dsread();void WriteNbyte(u8 addr…

人机界面和三菱PLC之间以太网通信

本文主要描述人机界面WinCC如何与三菱Q系列PLC进行以太网通讯&#xff0c;主要介绍了CPU自带以太网口和扩展以太网模块两种情况以及分别使用TCP、UDP两种协议进行通讯组态步骤及其注意事项。 一、 说明 WinCC从V7.0 SP2版本开始增加了三菱以太网驱动程序&#xff0c;支持和三…

Windows常用协议

LLMNR 1. LLMNR 简介 链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,可用于解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6&#xff0c;是仅次于DNS 解析的名称解析协议。 2.LLMNR 解析过程 当本地hosts 和 DNS解析 当本地hosts 和 …

docker 常用指令(启动,关闭,查看运行状态)

文章目录 docker 常用指令启动 docker关闭 docker查看 docker的运行状态 docker 常用指令 启动 docker systemctl start docker关闭 docker systemctl stop docker查看 docker的运行状态 systemctl status docker如下图所示&#xff1a; 表示docker正在运行中

集合框架体系和使用1(Collection)

Map的不同实现类单独再搞一章讲 目录 数组的特点、弊端与集合框架体系介绍 数组 特点 弊端 Java集合框架体系&#xff08;java.util包下&#xff09; java.util.Collection:存储一个一个的数据&#xff08;主要讲两个子接口&#xff09; java.util.Map:存储一对一对的数据…

Jetpack Compose 状态管理的三个误区

1. 注意在协程中更新状态值时的线程安全问题 例如我们有如下代码&#xff1a; data class MyUiState(val counter: Int 0,val text: String "" )class MainViewModel: ViewModel() {private val _state MutableStateFlow(MyUiState())val state _state.asState…

Vue2 迁移到 Vue3

一.《Vue 3 迁移指南》参考文档&#xff1a;https://v3-migration.vuejs.org/zh/ 二.Vue 3 中需要关注的一些新特性。 1. 组合式 API*&#xff1b; 2. 单文件组件中的组合式 API 语法糖 (<script setup>)*&#xff1b; 3. Teleport 组件&#xff1b; 4. Fragments 片段&…

【uni-app】常用组件和 API

常用组件 uni-app 为开发者提供了一系列基础组件&#xff0c;类似 HTML 里的基础标签元素&#xff0c;但 uni-app 的组件与 HTML 不同&#xff0c;而是与小程序相同&#xff0c;更适合手机端使用。 虽然不推荐使用 HTML 标签&#xff0c;但实际上如果开发者写了div等标签&…

基于uniapp大学生社团活动管理系统python+java+node.js+php微信小程序

uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 语言&#xff1a;pythonjavanode.jsphp均支持 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 运行软件:idea/eclipse/vscod…

关于 REST API 和 SOAP,你知道多少?

背景 通过上篇文章 关于 REST API&#xff0c;你了解多少&#xff1f;&#xff0c;我们知道REST API是在Web应用程序的发展过程中产生的。在Web应用程序的早期阶段&#xff0c;应用程序之间的通信主要是通过SOAP&#xff08;Simple Object Access Protocol&#xff09;和XML-R…

递归和迭代【Py/Java/C++三种语言详解】LeetCode每日一题240218【树DFS】LeetCode 589、 N 叉树的前序遍历

有LeetCode算法/华为OD考试扣扣交流群可加 948025485 可上全网独家的 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1336了解算法冲刺训练 文章目录 题目描述解题思路代码方法一&#xff1a;递归法PythonJavaC时空复杂度 方法二&#xff1a;迭代法PythonJavaC时空复杂度 …

面试redis篇-08数据淘汰策略

原理 当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略。 Redis支持8种不同策略来选择要删除的key: noeviction: 不淘汰任何key,但是内存满时不允许写入新数据,默认就是…

【Pytorch】模块化

文章目录 1. 获取数据2. 创建Dataset和DataLoader3. 定义模型4. 创建训练模型引擎函数5. 创建保存模型的函数6. 训练、评估并保存模型 模块化涉及将jupyter notebook代码转换为一系列提供类似功能的不同 Python 脚本。 可以将笔记本代码从一系列单元格转换为以下 Python 文件&…

JetBrains系列工具,配置PlantUML绘图

PlantUML是一个很强大的绘图工具&#xff0c;各种图都可以绘制&#xff0c;具体的可以去官网看看&#xff0c;或者百度。 PlantUML简述 https://plantuml.com/zh/ PlantUML语言参考指引 https://plantuml.com/zh/guide PlantUML语言是依赖Graphviz进行解析的。Graphviz是开源…