(a==1 && a==2 && a==3) 在 Java 中可以计算为 true 吗?

2024-02-13

我们知道它可以在 JavaScript 中 https://stackoverflow.com/q/48270127/476716.

但是在Java中是否可以在下面给出的条件下打印“成功”消息?

if (a==1 && a==2 && a==3) {
    System.out.println("Success");
}

有人建议:

int _a = 1;
int a  = 2;
int a_ = 3;
if (_a == 1 && a == 2 && a_ == 3) {
    System.out.println("Success");
}

但通过这样做,我们正在改变实际变量。还有其他办法吗?


是的,如果你声明变量,用多个线程实现这一点很容易a作为挥发性的。

一个线程不断地将变量 a 从 1 更改为 3,另一个线程不断测试该变量a == 1 && a == 2 && a == 3。这种情况经常发生,控制台上会连续打印出“成功”信息。

(请注意,如果您添加else {System.out.println("Failure");}子句,您会发现测试失败的次数远多于成功的次数。)

实际上,它也可以在不声明的情况下工作a不稳定,但在我的 MacBook 上只有 21 次。没有volatile,允许编译器或HotSpot缓存a或更换if声明与if (false)。最有可能的是,HotSpot 会在一段时间后启动并将其编译为汇编指令,这些指令会缓存a. With volatile,它永远打印“成功”。

public class VolatileRace {
    private volatile int a;

    public void start() {
        new Thread(this::test).start();
        new Thread(this::change).start();
    }

    public void test() {
        while (true) {
            if (a == 1 && a == 2 && a == 3) {
                System.out.println("Success");
            }
        }
    }

    public void change() {
        while (true) {
            for (int i = 1; i < 4; i++) {
                a = i;
            }
        }
    }

    public static void main(String[] args) {
        new VolatileRace().start();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(a==1 && a==2 && a==3) 在 Java 中可以计算为 true 吗? 的相关文章

随机推荐

  • 扫描代码注释并转换为标准格式的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个 C 项目 该项目有许多不同的作者和许多不同的文档风格 我是以下的忠实粉丝doxygen
  • 通过 Nginx、Django 提供 206 字节范围服务

    我让 Nginx 为我的静态 Django 文件提供服务 该文件在 Gunicorn 上运行 我正在尝试提供 MP3 文件并让它们具有头部 206 以便 Apple 接受它们用于播客 目前 音频文件位于我的静态目录中 并直接通过 Nginx
  • 受保护的构造函数有哪些实际用途?

    为什么有人会声明构造函数受保护 我知道构造函数被声明为私有 目的是不允许它们在堆栈上创建 当一个类是 旨在作为 抽象类时 受保护的构造函数是完全正确的 在这种情况下 您不希望从类实例化对象 而只想使用它来继承 还有其他用例 例如某些构造参数
  • 使用没有表单的视图创建 django 对象

    我想知道如何能够根据用户将要访问的 URL 在数据库中创建对象 例如 他们将转到 schedule addbid 1 这将在表中创建一个对象 其中包含投标的所有者 他们投标的时间表以及投标是否已完成 这是迄今为止我的投标模型的内容 clas
  • 列表中的枚举值

    我有一个枚举类 例如 public enum USERTYPE Permanant 1 Temporary 2 在我的业务对象中 我只是将这个枚举声明为 private List
  • 如何根据模型类上返回布尔值的方法的结果来过滤查询集?

    作为我的模型类之一的成员函数 我有一个is visible self user 返回布尔值的方法 根据定义 它需要请求用户 DjangoUser模型 作为输入 我希望能够根据对此方法的响应来过滤查询集 如何使用此函数作为查询集过滤器 对于上
  • keySet().toArray(new Double[0]) 的作用是什么?

    下面的返回有什么作用 我该如何使用该值 private Map
  • 提交表单时如何从 mgt-people-picker 获取输入值

    我在用着mgt people picker从 ASP Net Razor 应用程序中 使用ProxyController从 Graph API 获取所有数据 一切正常 现在我想从我创建的表单中获取信息 其中包含人员列表mgt people
  • ColdFusion 通过 Java 执行 OWASP esapi

    我有一些旧的 ColdFusion 代码 它最初是为 CF9 编写的 但现在运行在 CF 2016 上 应用程序 cfc local esapi createObject java org owasp esapi ESAPI applica
  • Postgresql 使用外键约束截断表

    目前我正在尝试截断在 Postgresql 11 3 上具有外键约束的表 我尝试这样做 BEGIN SET CONSTRAINTS ALL DEFERRED TRUNCATE tableA COMMIT 但收到错误 ERROR cannot
  • UIPageViewController 的大小很奇怪

    我正在使用一个UIPageViewController在我的应用程序中 它工作得很好 但是当我翻页时 下一页似乎在比屏幕大的框架中初始化 翻页时 只有下一页视图的一部分viewController适合屏幕 我正在初始化UIPageViewC
  • 识别 NHibernate 代理类

    我不是 NHibernate 用户 我编写了一个序列化实用程序库 用户记录了一个功能请求 要求我处理 NHibernate 代理类 将它们视为与实际类型相同 目前我的代码将它们视为意外继承 并引发异常 代码不会提前了解 NHibernate
  • 将 BytesMessage 转换为字符串?

    最好的转换方式是什么ByteMessage to String 我有以下代码 我们有更干净的方法吗 BytesMessage byteMessage set byteMessage byte byteArr new byte int byt
  • jsTree 禁用某些复选框

    将 jsTree 3 1 0 与复选框插件一起使用是否可以允许并非所有复选框都进行检查 禁用其中一些 我在这里找到了旧版本 jsTree 的解决方案jstree 禁用复选框 https stackoverflow com questions
  • 比较日期时间函数 cypress

    我有一个表单 允许用户输入日期范围 并且输出将仅包含该特定日期的结果 我可以使用 type 函数将日期输入到表单中 但是 我不确定如何检查结果是否在指定的范围内 例如 如果输入的日期是 17 03 2019 我应该能够使用这样的代码检查表中
  • Optaplanner 将客户从有效的 VRP 解决方案中删除

    基于此question https stackoverflow com questions 47913276 optaplanner vrp remove customer from working solution我尝试了以下方法 pub
  • 我该如何为这个不变量编写一个循环?

    这些是查找数组 b h k 最小值的算法的断言 Precondition h lt k lt b length Postcondition b x is the minimum of b h k 这是这个不变量的正确循环吗 不变式 b x
  • 将工具提示保留在浏览器窗口内? (不使用插件)

    我的工具提示代码如下 HTML CSS a tooltip span display none padding 5px border 1px solid 000 background 999 position absolute color
  • 如何使用谷歌地图路径点进行交通

    我知道我们不允许使用谷歌地图 API 路径点进行 TRANSIT 有什么方法 可能 可以解决这个问题 让谷歌地图在路径点中找到指向多个地址的方向 但仅用于 TRANSIT 来自文档 https developers google com m
  • (a==1 && a==2 && a==3) 在 Java 中可以计算为 true 吗?

    我们知道它可以在 JavaScript 中 https stackoverflow com q 48270127 476716 但是在Java中是否可以在下面给出的条件下打印 成功 消息 if a 1 a 2 a 3 System out