A diferença é que o | (tubo único) é bit a bit ou operador e quando também pode ser usado no projeto de condição.
por exemplo.
class CheckCondition {
public static boolean checkMe(int x)
{
System.out.println("checked");
if(x>10)
return true;
else
return false;
}
public static void main(String[] args)
{
int a=2,b=32,c=4;
if( checkMe(2) | checkMe(2) | checkMe(4)){
System.out.println("====");
}
if(checkMe(2) || checkMe(2) || checkMe(4)){
System.out.println("====");
}
}
}
No trecho de código acima, “|” verificará todas as partes da condição, enquanto “||” verificará em sequência começando da primeira. Se alguma condição na sequência for verdadeira, então || interrompe a verificação adicional. então || é mais eficiente em declarações condicionais.