javaで変数の初期状態

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
daj

javaで変数の初期状態

#1

投稿記事 by daj » 12年前

javaです。

コード:

int[] t=new int[136];
/*中略*/
t[0]=null;
とするとエラーがでるのですが、変数の中身を空っぽにするにはnullを代入する形では駄目なのでしょうか?

アバター
海Sea
記事: 102
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: javaで変数の初期状態

#2

投稿記事 by 海Sea » 12年前

daj さんが書きました:javaです。

コード:

int[] t=new int[136];
/*中略*/
t[0]=null;
とするとエラーがでるのですが、変数の中身を空っぽにするにはnullを代入する形では駄目なのでしょうか?
intなどの型は、
基本データ型(あるいはプリミティブ型)と言って
nullを代入することができません。
つまり、nullにはならず、
dajさんが仰る空っぽという考えが成り立ちません。
したがって、これはコンパイルエラーになります
nullは参照型にしか使えないので注意してください。

salsaww

Re: javaで変数の初期状態

#3

投稿記事 by salsaww » 12年前

コード:

public class HogeMaster {
	public static void showElement(Integer z)
	{
		if(z==null)
			System.out.println("中身はNull");
		else
			System.out.println("中身は"+z);
	}
	
	public static void main(String[] argv)
	{
		Integer[] t= new Integer[6];
		for(int i=0;i<t.length;i++)
			{	showElement(t[i]);}
		for(int i=0;i<t.length;i++)
			{	t[i]=i*i*i; }
		int test=100;
		showElement(test);// int型でも大丈夫
		showElement(test+t[2]);//もちろん計算も普通に。
		for(int i=0;i<t.length;i++)
		{	showElement(t[i]);}
		for(int i=0;i<t.length;i++)
		{	t[i]=null; }
		for(int i=0;i<t.length;i++)
		{	showElement(t[i]);}
		//showElement(test+t[0]);
		//もちろん、null要素のInteger classでは例外java.lang.NullPointerExceptionが投げられる。
	}
}
基本的に、dajさんの仰られる通りです。
なので、nullなど、数値じゃない事を表現したい場合や、
どうしてもオブジェクトであって欲しい場合は、
intの時は、Integer classを使う事で代用できます。

daj

Re: javaで変数の初期状態

#4

投稿記事 by daj » 12年前

お二人とも返信ありがとうございます。
intにnullが入らないことや、代用のクラスを使えばいいことは分かったと思います。

ちなみに、int型の何も入ってない状態(t=0等の変数の初期化、代入を行っていない状態)にすることは出来るのでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: javaで変数の初期状態

#5

投稿記事 by h2so5 » 12年前

daj さんが書きました:ちなみに、int型の何も入ってない状態(t=0等の変数の初期化、代入を行っていない状態)にすることは出来るのでしょうか?
できません。
よく初心者向けの変数の説明として箱を例に使うことがありますが、実際は箱のような性質はありません。
中身を空にすることはできないのです。

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: javaで変数の初期状態

#6

投稿記事 by beatle » 12年前

int型は整数値しか格納できません。
「-1を何も入っていない状態ということにする」などと心で決めれば、

コード:

int[] t = new int[136];
t[0] = -1;
とすることで、t[0]には何も入っていないことを表せます。

しかし、t[0]には「整数しか入れられない」ので、「何も入っていない」という、整数ではない値(つまりnullのような値)を代入することは不可能です。

ただし、例えばローカル変数で

コード:

int i;
などと変数宣言した直後は、iは「未初期化」の状態になっています。
しかし、iに初期値を代入しないままiの値を読み出せませんから、結局「iに何も入っていない」状態を表すには、
何らかの整数値(例えば-1)を「何も入っていない」と思い込むしかありません。

別の方法として、値が入っているかどうかを示すboolean変数を作ったり、null値を許すためにInteger型を使ったりという方法はあります。

コード:

int[] t = new int[136];
boolean[] tBlank = new boolean[136];
tBlank[0] = true; // tBlank[n]がtrue ならば t[n]が空ということにする。

コード:

Integer[] t = new Integer[136];
t[0] = null; // Integer型ならnullを扱える

daj

Re: javaで変数の初期状態

#7

投稿記事 by daj » 12年前

お二人とも返信ありがとうございました
m(_ _)m

閉鎖

“C言語何でも質問掲示板” へ戻る