Dos Equis
2016 ワード
次のプログラムは何を印刷しますか?
当たり前のようにX X
(変数iをデジタル出力に変換したのはX X)
でも実際はそうなの?答えは否定的で、彼が印刷したのはX 88です.
これは、ブレンドタイプの計算が混乱を引き起こすためであり、これは条件式で他のどこよりも明らかである.
条件式の結果タイプを決定するルールは冗長で複雑すぎて、完全に覚えにくいですが、その核心は次の3つです.
•2番目と3番目のオペランドが同じタイプの場合は、条件式のタイプです.言い換えれば、ハイブリッドタイプの計算を迂回することで、大きなトラブルを避けることができます.
•1つのオペランドのタイプがTで、Tがbyte、short、charを表し、もう1つのオペランドがintタイプの定数式で、その値がタイプTで表すことができる場合、条件式のタイプはTです.
•そうでない場合は、オペランドタイプに対してバイナリ数値を適用しますが、条件式のタイプは、2番目と3番目のオペランドが昇格した後のタイプです.
プログラムの2つの条件式では,1つのオペランドのタイプはcharであり,もう1つのタイプはintである.2つの式では、intオペランドはいずれも0であり、charとして表すことができる.しかしながら、第1の式のintオペランドのみが定数(0)であり、第2の式のintオペランドは変数(i)である.したがって、第2の点は第1の式に適用され、返されるタイプはcharであり、第3の点は第2の式に適用され、その返されるタイプはintとcharに対してバイナリ数値を用いて昇格したタイプ、すなわちintである.
1 public class DosEquis{
2 public static void main(String[]args){
3 char x= 'X';
4 int i = 0;
5 System.out.println(true ? x :0);
6 System.out.println(false ? i : x);
7 //System.out.println(false ? 0 : x);
8 }
9 }
当たり前のようにX X
(変数iをデジタル出力に変換したのはX X)
でも実際はそうなの?答えは否定的で、彼が印刷したのはX 88です.
これは、ブレンドタイプの計算が混乱を引き起こすためであり、これは条件式で他のどこよりも明らかである.
条件式の結果タイプを決定するルールは冗長で複雑すぎて、完全に覚えにくいですが、その核心は次の3つです.
•2番目と3番目のオペランドが同じタイプの場合は、条件式のタイプです.言い換えれば、ハイブリッドタイプの計算を迂回することで、大きなトラブルを避けることができます.
•1つのオペランドのタイプがTで、Tがbyte、short、charを表し、もう1つのオペランドがintタイプの定数式で、その値がタイプTで表すことができる場合、条件式のタイプはTです.
•そうでない場合は、オペランドタイプに対してバイナリ数値を適用しますが、条件式のタイプは、2番目と3番目のオペランドが昇格した後のタイプです.
プログラムの2つの条件式では,1つのオペランドのタイプはcharであり,もう1つのタイプはintである.2つの式では、intオペランドはいずれも0であり、charとして表すことができる.しかしながら、第1の式のintオペランドのみが定数(0)であり、第2の式のintオペランドは変数(i)である.したがって、第2の点は第1の式に適用され、返されるタイプはcharであり、第3の点は第2の式に適用され、その返されるタイプはintとcharに対してバイナリ数値を用いて昇格したタイプ、すなわちintである.