The only difference is that || may short circuit, but | will not. What does this mean? if(a.isThis() || b.isThis()){ Here if a.isThis() evaluates to true, b.isThis() will not be evaluated at all (there is no need). if(a.isThis() | b.isThis()){ Here if a.isThis() evaluates to true, b.isThis() will still be evaluated, even though there is no need. This only matters if ...