La conversion Booléen Entier en Java sans Si-États

Je me demandais si il existe un moyen de convertir une valeur de type boolean int sans l'aide si les déclarations (de ne pas rompre le pipeline). Par exemple, je pourrais écrire

int boolToInt( boolean b ){
  if ( b )
    return 1
  return 0

Mais je me demandais si il existe un moyen de le faire sans l'instruction si, comme Python

bool = True 
num = 1 * ( bool )

J'ai aussi la figure que vous pourriez faire

boolean bool = True;
int myint = Boolean.valueOf( bool ).compareTo( false );

Cela crée un objet supplémentaire, si, si c'est vraiment du gâchis et je l'ai trouvé encore plus lente que la si-état moyen (qui n'est pas forcément inefficace, a juste l'une de ses faiblesses).

  • qu'entendez-vous par "ne pas rompre le pipeline"?
  • Et votre deuxième morceau de code fait exactement la même chose (c'est à dire qu'il utilise un si).
  • stackoverflow.com/questions/315306/is-if-expensive je pense que les adresses de la canalisation question bien
  • La question est discutable. Au niveau le plus bas, quelle que soit la langue, la vérité reste que certains de ramification se produire. Et ce genre de ramification est tellement rapide qu'il peut se passer 10^n fois, n <= 10, sans avoir le temps de cligner des yeux. Donc, finalement: pourquoi importe-t-il à tous?
  • voir ma réponse - bien que banal, elle peut être admissible 🙂
  • Je ne vais pas cela comme une réponse car il n'est pas plus rapide, mais voici une autre façon de faire: return (Boolean.valueOf(b).hashCode() >> 1) & 1; La valeur de retour de type Boolean.valueOf est toujours l'une des constantes de classe, donc il n'y a pas de création de l'objet de frais généraux, mais il comporte encore deux (caché) ifs.
  • Pourquoi êtes-vous exactement à l'aide de booléenne au lieu de int? Juste par curiosité, parce que je pense boolean utilise autant d'espace mémoire, en tant qu'entier.
  • Pourquoi la ramification se produire? Ne peut pas/ne veut pas la JVM magasin vrai que 1 et faux à zéro?

InformationsquelleAutor en_Knight | 2013-06-01