教育サーバーのページ
オンラインテキスト目次
ソフトウエア入門演習
正しい識別子: NewYork h max2 scaled_data scaledData
正しくない識別子: 4NewYork(数字で始まっている) min-max(-を使っている) #number(#を使っている) void(キーワードを使っている) data@big(@を使っている)
b = 129; の行において、byte型の変数bに129を代入しようとしている。byte型は-128から127までの値しか取れないのでエラーとなる。
b = i; の行において、int型の変数iの値をbyte型の変数bに代入しようとしている。byte型はint型よりも表現できる数の範囲が狭いためエラーとなる。
b = 129; の行をどう変えるかで2通りある。
b = i; の行はキャストを使って無理矢理byte型に変換する。
なお、System.out.println("b + s" + b + s); の b + s は数値の足し算を意図していると考えると、これでは文字列の連結がなされるので、System.out.println("b + s = " + (b + s)); とすべきである。
public class TestIntVar1 { public static void main(String argv[]) { byte b; short s = 23; int i; long n = 15L; b = 127; i = -53; System.out.print("byte b = " + b); System.out.print(" short s = " + s + "\n"); i = 4; System.out.print("int i = " + i); System.out.println(" long n = " + n); b = (byte)i; n = i = b; System.out.println("int i = " + i); System.out.println("long n = " + n); System.out.println("b + s =" + (b + s)); i = b + s; System.out.println("i = " + i); i = i + 1; System.out.println("i = " + i); } }(2) b = 129; の129の値をキャストを使ってbyte型に変換してから代入する場合
public class TestIntVar1 { public static void main(String argv[]) { byte b; short s = 23; int i; long n = 15L; b = (byte)129; i = -53; System.out.print("byte b = " + b); System.out.print(" short s = " + s + "\n"); i = 4; System.out.print("int i = " + i); System.out.println(" long n = " + n); b = (byte)i; n = i = b; System.out.println("int i = " + i); System.out.println("long n = " + n); System.out.println("b + s =" + (b + s)); i = b + s; System.out.println("i = " + i); i = i + 1; System.out.println("i = " + i); } }
また、b = i; の行を i = b; すべきと解釈するという選択子もある。ただし、b,i,n の値が上記のプログラムとは異なってしまう。また、次の行 n = i = b; で i = b と同じ代入を行っているので、i = b; の行は無駄になる。したがって、その行は削除しても良いと解釈できる。
以下、x^yはxのy乗を示す。
byte型は符号付き8ビット整数であるので-2^7(=-128)から2^7-1(127)。
short型は符合付き16ビット整数であるので-2^15(=-32768)から2^17-1(32767)。
int型は符合付き32ビット整数であるので-2^31(=-2147483648)から2^31-1(=2147483647)。
long型は符合付き64ビット整数であるので-2^63(=-9223372036854775808)から2~63-1(=9223372036854775807)。
c1は文字型であるのでprintlnでそのまま表示しようとすると、その値である文字('a')が表示されてしまう。ここではUnicodeにおける文字コードの値(0x0061)を表示したいため、一度(int)でint型に変換している。ただし文字コードの値は10進数で表示されていることに注意せよ。
---- Foo.java ----
public class Foo { public static void main(String[] args) { int x=10, y=20, z=30; int t; t = x; x = y; y = z; z = t; System.out.println("x="+x+", y="+y+", z="+z); } }