In other words, do the following two statements behave the same way?
isFoobared = isFoobared && methodWithSideEffects(); isFoobared &= methodWithSideEffects();
I realize I could just write up a test, but someone might know this offhand, and others might find the answer useful.
delivery order in British English (dɪˈlɪvərɪ ˈɔːdə ) business. a document that records an order for delivery of goods. ▶ USAGE The abbreviation for delivery order is D/O or d.o. Collins English Dictionary.
Do as an auxiliary verb. Do is one of three auxiliary verbs in English: be, do, have. We use do to make negatives (do + not), to make question forms, and to make the verb more emphatic.
: a system of medical practice that emphasizes a holistic and comprehensive approach to patient care and utilizes the manipulation of musculoskeletal tissues along with other therapeutic measures (such as the use of drugs or surgery) to prevent and treat disease : osteopathic medicine.
doing (noun) do–it–yourself (adjective) done. done (adjective)
No, |=
and &=
do not shortcircuit, because they are the compound assignment version of &
and |
, which do not shortcircuit.
JLS 15.26.2 Compound Assignment Operators
A compound assignment expression of the form
E1 op= E2
is equivalent toE1 = (T)((E1) op (E2))
, whereT
is the type ofE1
, except thatE1
is evaluated only once.
Thus, assuming boolean &
, the equivalence for isFoobared &= methodWithSideEffects()
is:
isFoobared = isFoobared & methodWithSideEffects(); // no shortcircuit
On the other hand &&
and ||
do shortcircuit, but inexplicably Java does not have compound assignment version for them. That is, Java has neither &&=
nor ||=
.
The difference between the boolean
logical operators (&
and |
) compared to their boolean
conditional counterparts (&&
and ||
) is that the former do not "shortcircuit"; the latter do. That is, assuming no exception etc:
&
and |
always evaluate both operands&&
and ||
evaluate the right operand conditionally; the right operand is evaluated only if its value could affect the result of the binary operation. That means that the right operand is NOT evaluated when: &&
evaluates to false
false
)||
evaluates to true
true
)&
, ^
, and |
&&
||
No, they do not, because x &= y
is short for x = x & y
and x |= y
is short for x = x | y
. Java has no &&=
or ||=
operators which would do what you want.
The &
and |
operators (along with ~
, ^
, <<
, >>
, and >>>
) are the bitwise operators. The expression x & y
will, for any integral type, perform a bitwise and operation. Similarly, |
performs a bitwise or. To perform a bitwise operation, each bit in the number is treated like a boolean, with 1
indicating true
and 0
indicating false
. Thus, 3 & 2 == 2
, since 3
is 0...011
in binary and 2
is 0...010
. Similarly, 3 | 2 == 3
. Wikipedia has a good complete explanation of the different operators. Now, for a boolean, I think you can get away with using &
and |
as non-short-circuiting equivalents of &&
and ||
, but I can't imagine why you'd want to anyway.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With