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

在Java中,我有很长的比较要做,我想知道其中是否有一个或多个是正确的。比较字符串很长且难以阅读,因此为了便于阅读,我对其进行了拆分,并自动使用快捷方式运算符|=而不是negativeValue = negativeValue || boolean。


boolean negativeValue = false;

negativeValue |= (defaultStock < 0);

negativeValue |= (defaultWholesale < 0);

negativeValue |= (defaultRetail < 0);

negativeValue |= (defaultDelivery < 0);

negativeValue如果任何默认<something>值为负,我希望是真实的。这有效吗?会满足我的期望吗?我在Sun的站点或stackoverflow上都看不到它,但是Eclipse似乎没有问题,并且代码可以编译并运行。


同样,如果我想执行几个逻辑交集,是否可以使用&=代替&&?


临摹微笑
浏览 552回答 3
3回答

呼唤远方

它不是||方式的“捷径”(或短路)运算符。和&&是(因为如果他们已经知道基于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)针对该特定情况进行处理-我只是在试图说明原理。)

慕桂英546537

如果是关于可读性,我就有了将测试数据与测试逻辑分离的概念。代码示例:// declare dataDataType [] dataToTest = new DataType[] {&nbsp; &nbsp; defaultStock,&nbsp; &nbsp; defaultWholesale,&nbsp; &nbsp; defaultRetail,&nbsp; &nbsp; defaultDelivery}// define logicboolean checkIfAnyNegative(DataType [] data) {&nbsp; &nbsp; boolean negativeValue = false;&nbsp; &nbsp; int i = 0;&nbsp; &nbsp; while (!negativeValue && i < data.length) {&nbsp; &nbsp; &nbsp; &nbsp; negativeValue = data[i++] < 0;&nbsp; &nbsp; }&nbsp; &nbsp; return negativeValue;}该代码看起来更加冗长和不言自明。您甚至可以在方法调用中创建一个数组,如下所示:checkIfAnyNegative(new DataType[] {&nbsp; &nbsp; defaultStock,&nbsp; &nbsp; defaultWholesale,&nbsp; &nbsp; defaultRetail,&nbsp; &nbsp; defaultDelivery});它比“比较字符串”更具可读性,并且还具有短路的性能优势(以数组分配和方法调用为代价)。编辑: 使用varargs参数可以简单地实现更高的可读性:方法签名为:boolean checkIfAnyNegative(DataType ... data)呼叫看起来像这样:checkIfAnyNegative( defaultStock, defaultWholesale, defaultRetail, defaultDelivery );
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java