下記のコードについてですが、変数sはnullで初期化されてません。
ですが、コンパイルエラーが発生することもなく実行可能です。
どうしてなのでしょうか?
よろしくお願い致します。
package exercise;
import lib.Input;
public class P2 {
public static void main(String[] args) {
String s ;
while((s=Input.getString())!= null){
System.out.println(s);
}
}
}
【設定環境】
java: 1.8.0_66
Eclipse 4.5 Mars マース SR1 for Windows ベース
Pleiades All in One 4.5.1.v20151002 Java 64bit Standard Edition
【取得した資格】
サーティファイ Javaプログラミング能力検定試験 3級
オラクルJavaアソシエイツ
オラクルJavaプログラマ SE7 Silver
No.4
- 回答日時:
変数定義のみで初期化しない場合、各型ごとに定められたデフォルト値が設定されます。
String型の場合はデフォルト値がnullです。よって、「String s;」でsにはnullが設定されています。変数sのスコープはmainメソッド内です。while文内もスコープ範囲内です。
No.1
- 回答日時:
・サーティファイ Javaプログラミング能力検定試験 3級
http://www.sikaku.gr.jp/js/jv/org/about/sample/ よりたどれる3級の試験サンプルに同様の中括弧内から外の変数にアクセスしている問題があるのを確認
・オラクルJavaアソシエイツ、オラクルJavaプログラマ SE7 Silver
オラクルの Java 資格のページで資格レベルが同一であることを確認後、アソシエイツの試験範囲に変数のスコープが含まれているのを確認
……うーん、保有している資格の試験範囲にはどれも変数スコープについて含まれているようだから、この辺をちゃんと勉強していたなら何の疑問も持たないはずなんだけどなぁ……
> printlnの引数sは、直近のwhileブロックの内側から、
> mainメソッド内で宣言・初期化されたローカル変数sにアクセスしていると、
> いうことでしょうか?
その通り。
> ローカル変数sのスコープは2~8行目までの間でしょうか?
違う。変数が宣言された3行目から、宣言された時点での中括弧のネストの一番内側から抜ける8行目まで。
あと、
> s=Input.getString() ←変数の初期化
は初期化ではなく単なる代入です。変数の初期化は変数の宣言時にしか行えません。
hitomura様
返信ありがとうございます。
資格を習得していながら、
初歩的な内容があやふやなままでした。
今また参考書で勉強をし直しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java eclipse実行ができない 2 2022/07/27 04:47
- C言語・C++・C# C#の基本文法が詳しく書かれている教科書的な本ありますか 2 2023/02/11 03:48
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java java final 1 2022/06/10 22:49
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
C言語 列挙型(enum型)変数について
-
「%」を使って、偶数か奇数かを...
-
[VBS]変数を定数に変換する方法...
-
テキストボックスの値を変数に...
-
整数xxxが大き過ぎますというエ...
-
Accessコンボボックスにレコー...
-
ExcelのVBAでをA列に第0〜19項...
-
EXCEL/VBA 変数の値をクリップ...
-
構造体からレコードセットへの代入
-
python の 連鎖代入の文法
-
変数にオフセットが付いている...
-
processing エラーで、 "cannot...
-
プログラミングで変数と関数の...
-
切り上げ
-
i++と++i ってどう違うのですか?
-
vba 最大値 条件分岐
-
インクリメント演算子の前置(+...
-
JavaScriptをURLから直接実行し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
テキストボックスの値を変数に...
-
Variant型で宣言してるのにEmpt...
-
[VBS]変数を定数に変換する方法...
-
python の 連鎖代入の文法
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
構造体からレコードセットへの代入
-
コマンドプロンプト バッチ|結...
-
stdpicture型の変数に、、
-
無名関数のメリットがよくわか...
-
i++と++i ってどう違うのですか?
-
DataTableの値を変数に代入したい
-
Accessコンボボックスにレコー...
-
VBA 1行で複数の代入を行った...
おすすめ情報
String s ; ←変数の宣言
s=Input.getString() ←変数の初期化
System.out.println(s);
↑
printlnの引数sは、直近のwhileブロックの内側から、
mainメソッド内で宣言・初期化されたローカル変数sにアクセスしていると、
いうことでしょうか?
1行目 public static void main(String[] args)
2行目 {
3行目 String s ;
4行目 while((s=Input.getString())!= null)
5行目 {
6行目 System.out.println(s);
7行目 }
8行目 }
ローカル変数sのスコープは2~8行目までの間でしょうか?
Javaの文法が少し混乱しています。
(>'A`)> ゥォォォオオオオオオ