首页 > 编程语言 >x == (x = y) 与 (x = y) == x 不同?【Java 面试题】

x == (x = y) 与 (x = y) == x 不同?【Java 面试题】

时间:2024-03-20 18:58:05浏览次数:29  
标签:面试题 Java int 不同 System 求值 堆栈 表达式 out

x == (x = y) 与 (x = y) == x 不同?

class Quirky {
    public static void main(String[] args) {
        int x = 1;
        int y = 3;

        System.out.println(x == (x = y)); // false
        x = 1; // reset
        System.out.println((x = y) == x); // true
     }
}

分析思路

优先级&运算符角度

  • 括号并不表示求值的顺序。在 Java 中,计算顺序是从左到右,与括号无关。括号确定子表达式边界的位置,而不是计算的顺序。
  • 括号仅在算术表达式中发挥主要作用,而不是在比较表达式中。
  • 运算符的规则==是:计算左侧产生一个值,计算右侧产生一个值,比较这些值,比较结果就是表达式的值。评估左侧的所有规则都发生在评估右侧的所有规则之前。

堆栈角度

  • 系统使用堆栈来计算表达式。表达式从左到右进行计算。
int x = 1;
int y = 3;
System.out.println(x == (x = y)); // false

首先 x(1) 将被推入堆栈。然后将对内部 (x = y) 进行求值并将其推送到值为 x(3) 的堆栈。现在 x(1) 将与 x(3) 进行比较,因此结果为 false。

x = 1; // reset
System.out.println((x = y) == x); // true

这里,(x = y) 将被求值,现在 x 值变为 3,并且 x(3) 将被推送到堆栈。现在,相等后值发生变化的 x(3) 将被推入堆栈。

3 == x
3 == 3

现在将对表达式进行求值,两者相同,因此结果为 true。
原文链接

标签:面试题,Java,int,不同,System,求值,堆栈,表达式,out
From: https://blog.csdn.net/qq_58353992/article/details/136884986

相关文章

  • 常见面试题答案
    目录1.介绍一下volatile关键字2.C++中的内联函数和宏的区别在于:3.自己实现一个堆栈C++实现+模板4.函数后面加const的作用是什么?5.纯虚函数和虚函数的区别?1.介绍一下volatile关键字volatile是一个类型修饰符,用于告诉编译器对象的值可能会在编译器无法检测到的情况下被......
  • java中的抽象类不能被实例化,那为什么还有构造方法
    java中的抽象类不能被实例化,那为什么还有构造方法java中的类必须要有构造方法(无参和/或有参)(没有的话编译不过);如果没有显示定义,那编译器会默认给该类创建一个无参构造方法抽象类如果能实例化,那被实例化的这个对象就可以调用该类中定义的所有方法(包括抽象方法),但是抽象方法......
  • java 继承(中)
    前面我们已经说明了什么是继承?继承的好处弊端等,不清楚的可参照链接java继承(上)-CSDN博客本篇文章主要理解super和this的区别及联系。1、super本章节主要说明怎么访问方法内的变量,类内的成员变量,父类的成员变量,下面先看代码实现。1.1代码实现(1)Fu类的代码实现publiccla......
  • 提升Java编程安全性-代码加密混淆工具的重要性和应用
     在Java编程领域中,保护代码安全性和知识产权至关重要。本文旨在探讨代码加密混淆工具在提升代码安全性和保护知识产权方面的重要性。我们将介绍几款流行的Java代码加密混淆工具,如ProGuard、DexGuard、Jscrambler、DashO和ipaguard,并分析它们的功能和适用场景,旨在帮助开发者选择......
  • 卡码java基础课 | 16.出现频率最高的字母
    学习内容:哈希表:数组重点归纳:哈希表:根据关键码key的值而直接进行访问的数据结构。重点是哈希函数(散列函数),是一种对应关系f,根据关键字找到对应存储位置。大致分为3种,数组、set集合、map映射。本节主要学习数组作为哈希表的使用。例题:解:点击查看代码importjava.util.Scan......
  • Java中常见字符串拼接九种方式
    一、前言在Java编程中,字符串拼接是一项非常基础的操作,它涉及到了很多日常开发工作中常见的场景,例如拼接SQL语句、构建HTTP请求参数等等。因此,对于掌握好字符串拼接技巧不仅有助于提高代码效率,而且能够避免一些潜在的性能问题。下面我们就来列举出来几种方式,搭配例子!二......
  • JavaScript逆向之代码补环境(以iwencai为例)
    知识点1.浏览器环境与Node环境的区别1.1浏览器环境具有的功能页面渲染功能(1)加载和控制页面元素的能力->在js中由dom对象来完成(2)渲染引擎->和我们基本上无关浏览器本身的一些东西(窗口大小,url)->BOM对象能够执行js的能力->v8引擎负责执行js代码1.2Node环......
  • Java实现后端分页
    分页操作在开发中可以说是最基本的操作,特别是在做各种后台管理系统的时候,不可能一次性查询一千条、一万条数据。这时候就需要进行分页操作。那么在Java后端当中是如何实现分页的呢?下面就来聊一聊Java后端分页。Java分页原理首先说说分页的原理。有几个名词需要解释一下......
  • 面试题 17.12. BiNodec
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*convertBiNode(structTreeNode*root){if(!root)returnNULL;if(!root->left......
  • Java CC链全分析
    CC链全称CommonsCollections(Java常用的一个库)梦的开始CC1环境部署JDK版本:jdk8u65Maven依赖:<dependencies><!--https://mvnrepository.com/artifact/junit/junit--><dependency><groupId>junit</groupId><......