我们知道它可以用JavaScript实现。
但是,在Java中,是否可以在下面给出的条件下打印“Success”消息?
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");
}
但通过这样做,我们改变了实际变量。还有别的办法吗?
在这个问题中,@aioobe建议(并反对)对Java类使用C预处理器。
虽然这是一个非常骗人的问题,但这是我的解决方案:
#define a evil++
public class Main {
public static void main(String[] args) {
int evil = 1;
if (a==1 && a==2 && a==3)
System.out.println("Success");
}
}
如果使用以下命令执行,它将只输出一个Success
:
cpp -P src/Main.java Main.java && javac Main.java && java Main
使用一个精彩的代码高尔夫答案中的概念(和代码),整数值可以被弄乱。
在这种情况下,它可以使铸造为Integer
s的int
s相等,而它们通常不相等:
import java.lang.reflect.Field;
public class Test
{
public static void main(String[] args) throws Exception
{
Class cache = Integer.class.getDeclaredClasses()[0];
Field c = cache.getDeclaredField("cache");
c.setAccessible(true);
Integer[] array = (Integer[]) c.get(cache);
// array[129] is 1
array[130] = array[129]; // Set 2 to be 1
array[131] = array[129]; // Set 3 to be 1
Integer a = 1;
if(a == (Integer)1 && a == (Integer)2 && a == (Integer)3)
System.out.println("Success");
}
}
不幸的是,它不像欧文·博尔维特的多线程答案那么优雅(因为这个答案需要整数转换),但仍然发生了一些有趣的恶作剧。
是的,如果您将变量a
声明为volatile,那么使用多个线程很容易实现这一点。
一个线程不断地将变量a从1更改为3,另一个线程不断地测试a==1
(注意,如果您添加一个
else{System.out.println(“Failure”);}
子句,您将看到测试失败的次数远远多于成功的次数。)
实际上,它也可以在不声明
a
为易失性的情况下工作,但在我的MacBook上只有21次。如果没有易失性
,编译器或HotSpot可以缓存a
或用if(false)
替换if
语句。最有可能的是,HotSpot会在一段时间后启动并将其编译为缓存a
值的程序集指令。随着的易失性
,它将永远保持打印成功。
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();
}
}
类似于这个针对javascript的问题,它已经为各种不同的语言衍生出了许多副产品。我很好奇,在PHP中是否有以下情况:
问题内容: I’m trying to create a function that will convert a given list into a given dictionary (where I can specify/assign values if I want). So for instance, if I have a list and I want to convert to a
问题内容: I’m using Python’s Imaging Library and I would like to draw some bezier curves. I guess I could calculate pixel by pixel but I’m hoping there is something simpler. 问题答案: A bezier curve isn’t tha
Trash Can 是一个命令行下的回收站,提供一系列脚本用于在 ksh、bash 和 zsh 下运行,提供命令用于文件删除和恢复功能,同时提供从回收站中永久删除的命令。
Ember-can Simple authorisation addon for Ember. Installation Install this addon via ember-cli: ember install ember-can Compatibility Ember.js v3.20 or above Ember CLI v3.20 or above Node.js v12 or abo
CAN 简介 CAN 是控制器局域网络 (Controller Area Network, CAN) 的简称,是由以研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。 CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。