質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

11532閲覧

【Java】配列の要素、nullの扱い

kurasivui

総合スコア15

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/08/28 02:43

表題の件、2つのコードの出力結果を載せています。

コード1:配列初期化時にnullを設定
コード2:配列初期化自に"X"を設定後、nullを代入

質問:以下の認識で合っているでしょうか。

コード1は参照なしを表すリテラル nullとなっているため、そもそもstr[1]という要素が確保できていない。そのため処理途中でNullPointerExceptionが発生する。


コード2は初期化時の"X"でstr[1]という要素は確保されており、代入で要素の中身がnullになっているだけなので、nullというデータ1つ分、totalに加算される。

コード1

java

1public static void main(String[] args) { 2 String[][] str = {{"A", "B"}, null, {"C", "D", "E"}}; 3 int total = 0; 4 5 for(String[] s : str) { 6 total += s.length; 7 System.out.println(total); 8 } 9}

◆結果◆
2
Exception in thread "main" java.lang.NullPointerException

コード2

java

1public static void main(String[] args) { 2 String[][] str = {{"A", "B"}, {"X"}, {"C", "D", "E"}}; 3 int total = 0; 4 5 str[1][0] = null; 6 7 for(String[] s : str) { 8 total += s.length; 9 System.out.println(total); 10 } 11}

◆結果◆
2
3
6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

はい。あっています。

ごめんなさい。読み間違ってました。maisumakunさんの回答が正しいです。

str1の要素は確保されているので、
System.out.println("strの要素数:" + str.length);
とすると、要素は3になっていることを確認できます。


コード1の場合でも

java

1String[][] str = {{"A", "B"}, {null}, {"C", "D", "E"}};

のように定義すればNullPointerExceptionは発生しません。
※コード2のnull代入を1行で定義したものと同じ

一次元配列の例ですが、配列そのものがNullと、配列の要素がNullの違いです。
ここだけ見れば、いたってシンプルなので、そのままなのですが・・・

java

1String[] s; 2 3s = null; // 配列がnull 4// System.out.println(s.length); // s が null なので NullPointerException 5 6s = new String[] { null, null, null }; // 配列の要素がnull(領域=3は確保している) 7System.out.println(s.length); // 3 8

投稿2020/08/28 02:50

編集2020/08/28 03:20
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurasivui

2020/08/28 03:00

>System.out.println("strの要素数:" + str.length); 確かにこれで見れば良かったですね... ありがとうございます
guest

0

コード1は参照なしを表すリテラル nullとなっているため、そもそもstr[1]という要素が確保できていない。

違います。str[1]にはnull入っていますnullに対してlengthは呼べないので、そちらでNullPointerExceptionが発生します。

コード2は初期化時の"X"でstr[1]という要素は確保されており、代入で要素の中身がnullになっているだけなので、

違います。str[1]の中身(str[1][0] = null;による書き換え後)は、[null]という配列です。

投稿2020/08/28 02:48

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurasivui

2020/08/28 02:57

すみません、コード2の [null]という配列です。 がピンときておらず。 詳細を教えて頂いてもよろしいでしょうか。
maisumakun

2020/08/28 03:00

要素が1つのString[]で、唯一の要素にnullが代入されたものです。
momon-ga

2020/08/28 03:01

要素数1、中身がnullの配列と、[null]という配列は、同じじゃないかなぁ・・・
kurasivui

2020/08/28 03:02

ただ単一のnullを代入しているのではないのですね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問