为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的快捷方式“或分配”(| =)运算符

Java中的快捷方式“或分配”(| =)运算符

临摹微笑 2019-11-28 13:55:45
在Java中,我有很长的比较要做,我想知道其中是否有一个或多个是正确的。比较字符串很长且难以阅读,因此为了便于阅读,我对其进行了拆分,并自动使用快捷方式运算符|=而不是negativeValue = negativeValue || boolean。boolean negativeValue = false;negativeValue |= (defaultStock < 0);negativeValue |= (defaultWholesale < 0);negativeValue |= (defaultRetail < 0);negativeValue |= (defaultDelivery < 0);negativeValue如果任何默认<something>值为负,我希望是真实的。这有效吗?会满足我的期望吗?我在Sun的站点或stackoverflow上都看不到它,但是Eclipse似乎没有问题,并且代码可以编译并运行。同样,如果我想执行几个逻辑交集,是否可以使用&=代替&&?
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

它不是||方式的“捷径”(或短路)运算符。和&&是(因为如果他们已经知道基于LHS的结果,他们将不会评估RHS),但是它将在工作方面满足您的要求。


作为区别的一个示例,如果text为null ,则此代码会很好:


boolean nullOrEmpty = text == null || text.equals("")

而这不会:


boolean nullOrEmpty = false;

nullOrEmpty |= text == null;

nullOrEmpty |= text.equals(""); // Throws exception if text is null

(显然,您可以"".equals(text)针对该特定情况进行处理-我只是在试图说明原理。)


查看完整回答
反对 回复 2019-11-28
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

如果是关于可读性,我就有了将测试数据与测试逻辑分离的概念。代码示例:


// declare data

DataType [] dataToTest = new DataType[] {

    defaultStock,

    defaultWholesale,

    defaultRetail,

    defaultDelivery

}


// define logic

boolean checkIfAnyNegative(DataType [] data) {

    boolean negativeValue = false;

    int i = 0;

    while (!negativeValue && i < data.length) {

        negativeValue = data[i++] < 0;

    }

    return negativeValue;

}

该代码看起来更加冗长和不言自明。您甚至可以在方法调用中创建一个数组,如下所示:


checkIfAnyNegative(new DataType[] {

    defaultStock,

    defaultWholesale,

    defaultRetail,

    defaultDelivery

});

它比“比较字符串”更具可读性,并且还具有短路的性能优势(以数组分配和方法调用为代价)。


编辑: 使用varargs参数可以简单地实现更高的可读性:


方法签名为:


boolean checkIfAnyNegative(DataType ... data)

呼叫看起来像这样:


checkIfAnyNegative( defaultStock, defaultWholesale, defaultRetail, defaultDelivery );


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 550 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信