【问题标题】:Can I set some configuration flag in java whether null == null will be false or true?我可以在 java 中设置一些配置标志 null == null 是假还是真?
【发布时间】:2017-07-14 09:34:58
【问题描述】:

java中是否存在任何配置标志null == null将被比较为false或true?

现在它总是结果为真。

用例是将以下逻辑与 mysql 对齐,以便返回相同的结果:

在java中

System.out.println(null == null); //true

在mysql中

select if(null = null, 'true', 'false'); -- false

换句话说,java 中是否有一个配置功能,它允许配置比较的结果逻辑(例如 Double.NEGATIVE_INFINITY == Double.NaN 的输出)?

Configuration table

Configuration flag                     | Default  | Set Value
-------------------------------------- | ------   | --------
null==null                             | true     | false
Double.NEGATIVE_INFINITY == Double.NaN | false    | false
true = true                            | true     | true   
.....  

那么它可以通过一些标志来配置吗?

【问题讨论】:

  • 那个选项是完全危险的,因为这样的事情对代码来说是不透明的。 Java 中的所有内容都会检查可空性,现在想象一下这段代码突然停止工作:if (arg == null) { return 0; } else { return arg.hashCode(); },因为有人只是“喜欢它”。
  • 有没有这种配置标志的编程语言?
  • @AdamSiemion #define TRUE FALSE ?
  • @wings 与 null == null 是真还是假有什么关系?
  • @wings 并不意味着将 true 定义为 false,只要它很少需要,但它也可以添加到配置选项中。它可能是一个配置表,请通过添加表查找更新的问题。

标签: java mysql sql null


【解决方案1】:

null == null 的结果是defined by the JLS

在运行时,如果操作数的值都为 null 或都引用同一个对象或数组,则 == 的结果为真;否则结果为假。

任何会重新定义此行为的配置选项都将违反规范。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2019-11-20
    • 2021-03-21
    相关资源
    最近更新 更多