Apa cara yang paling diterima untuk mengkonversi boolean
ke int
di Jawa?
Apa cara yang paling diterima untuk mengkonversi boolean
ke int
di Jawa?
Jawaban:
int myInt = myBoolean ? 1 : 0;
^^
PS: true = 1 dan false = 0
(foo && (!bar || baz)) ? 1 : 0
. Jelas, jika itu hanya pengenal, parens tidak diperlukan atau diinginkan.
(boolean expression) ? 1 : 0;
akan lebih bisa dimengerti. Saya pikir my
awalan membuatnya terlihat seperti variabel.
foo && (!bar || baz) ? 1 : 0
akan menjadi kesalahan sintaksis. (Saya tahu ini sudah 6 tahun)
Menggunakan operator ternary adalah cara paling sederhana, paling efisien, dan paling mudah dibaca untuk melakukan apa yang Anda inginkan. Saya mendorong Anda untuk menggunakan solusi ini.
Namun, saya tidak bisa menolak untuk mengusulkan alternatif, buat, solusi yang tidak efisien, tidak terbaca.
int boolToInt(Boolean b) {
return b.compareTo(false);
}
Hei, orang-orang suka memilih jawaban yang keren!
Edit
Ngomong-ngomong, saya sering melihat konversi dari boolean ke int untuk tujuan tunggal melakukan perbandingan dua nilai (umumnya, dalam implementasi compareTo
metode). Boolean#compareTo
adalah cara untuk pergi dalam kasus-kasus khusus itu.
Edit 2
Java 7 memperkenalkan fungsi utilitas baru yang bekerja dengan tipe primitif secara langsung, Boolean#compare
(Terima kasih shmosel )
int boolToInt(boolean b) {
return Boolean.compare(b, false);
}
Boolean.compare()
dan menghindari autoboxing. 2. Dokumentasi untuk Boolean.compareTo()
tidak mengatakan itu akan mengembalikan 1, hanya "nilai positif jika objek ini mewakili benar dan argumen mewakili salah".
boolean b = ....;
int i = -("false".indexOf("" + b));
5 - b.toString().length
import org.apache.commons.lang3.BooleanUtils;
boolean x = true;
int y= BooleanUtils.toInteger(x);
BooleanUtils.toInteger
diimplementasikan sebagai adil return bool ? 1 : 0;
.
Itu tergantung situasinya. Seringkali pendekatan yang paling sederhana adalah yang terbaik karena mudah dipahami:
if (something) {
otherThing = 1;
} else {
otherThing = 0;
}
atau
int otherThing = something ? 1 : 0;
Tapi kadang-kadang berguna menggunakan Enum sebagai ganti boolean flag. Bayangkan ada proses sinkron dan asinkron:
Process process = Process.SYNCHRONOUS;
System.out.println(process.getCode());
Di Jawa, enum dapat memiliki atribut dan metode tambahan:
public enum Process {
SYNCHRONOUS (0),
ASYNCHRONOUS (1);
private int code;
private Process (int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
?:
adalah Anda bisa meletakkan breakpoint di dalam blok if.
Jika Anda menggunakan Apache Commons Lang (yang saya pikir banyak proyek menggunakannya), Anda bisa menggunakannya seperti ini:
int myInt = BooleanUtils.toInteger(boolean_expression);
toInteger
Metode mengembalikan 1 jika boolean_expression
benar, 0 sebaliknya
BooleanUtils.toInteger
diimplementasikan sebagai adil return bool ? 1 : 0;
.
Jika Anda ingin mengaburkan, gunakan ini:
System.out.println( 1 & Boolean.hashCode( true ) >> 1 ); // 1
System.out.println( 1 & Boolean.hashCode( false ) >> 1 ); // 0
Mari kita bermain trik Boolean.compare(boolean, boolean)
. Perilaku fungsi default: jika kedua nilai sama dari itu mengembalikan 0
sebaliknya -1
.
public int valueOf(Boolean flag) {
return Boolean.compare(flag, Boolean.TRUE) + 1;
}
Penjelasan : Seperti yang kita ketahui pengembalian default Boolean.compare adalah -1 jika terjadi kecocokan sehingga +1 membuat nilai pengembalian menjadi 0 untuk False
dan 1 untukTrue
Boolean.compare(myBoolean, false)
akan lebih cocok sesuai dengan deskripsi yang dikutip
Fakta bahwa saya harus menulis metode wrapper di sekitar pernyataan if untuk casting nilai hanya menambah daftar alasan yang sudah sangat besar mengapa java harus sudah mati. Dan melihat operator ternary bahkan tidak dibungkus dalam suatu fungsi tetapi hanya menyalin disisipkan di mana-mana saya melihat pemain boolean ke int hanya membuat saya gila. Ini buang-buang siklus cpu dan penghinaan terhadap pembacaan kode.
Juga sebagian besar jawaban di sini memiliki ratusan upvotes dengan penjelasan nol, yang membuat saya menebak bahwa praktik buruk hanyalah akibat dari terkena java begitu banyak. Jika saya menulis operator ternary untuk casting boolean ke int dalam bahasa modern apa pun, saya akan dipecat pada hari berikutnya dari pekerjaan apa pun yang saya miliki. Jadi hari ini saya sudah berhenti mencoba menggunakan alasan dengan tugas java saya dan memutuskan untuk merangkul kebodohan:
public static int booltoint(boolean nonsense) {
// Let's start with indenting using spaces, 16 of them to be precise
String[] ____int = new String[500];
____int[0] = Boolean.toString(nonsense);
try {
Thread.sleep(100);
} catch (Exception e) { }
Random rand = new Random();
int n = rand.nextInt((int)1e9);
int result = 0;
int other_Result = 1;
for (int i = -5; i < 2; i++) {
try {
if (n == 35467247) return 5; // let's just fail with one in a billion chance
if ((5 - ____int[i].length()) == 1) {
return ++result;
} else if(____int[i] == "false") {
return --other_Result;
}
} catch (Exception e) {
// This method will throw an exception 5 times every single time I
// cast a boolean to int before returning an integer
}
}
return (int)1e35;}
true
danfalse
masing - masing?