萌新:String 型变量赋值前为什么要先初始化?(我是在switch语句里赋值的)

import java.util.Scanner;

 

public class Main {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner in=new Scanner(System.in);

int NumRS=in.nextInt();

int NumR=NumRS/10;

int NumS=NumRS%10;

String R=null,S=null;//这里我一开始是写的 String R,S;

switch(NumS)

{

case 1: S=("Faint signals, barely perceptible");

    break;

case 2: S=("Very weak signals");

break;

case 3: S=("Weak signals");

break;

case 4: S=("Fair signals");

break;

case 5: S=("Fairly good signals");

break;

case 6: S=("Good signals");

break;

case 7: S=("Moderately strong signals");

break;

case 8: S=("Strong signals");

break;

case 9: S=("Extremely strong signals");

break;

}

switch(NumR)

{

case 1:R=("Unreadable");

       break;

case 2: R=("Barely readable, occasional words distinguishable");

    break;

case 3: R=("Readable with considerable difficulty");

    break;

case 4: R=("Readable with practically no difficulty");

   break;

case 5: R=("Perfectly readable");

    break;

}

System.out.println(R+S);

 

}

 

}

我加粗的那一行,我一开始没有给他赋初值,结果程序提示我R,S没有被初始化。可是我只是给R,S赋值,又不是使用他们,为什么要先初始化?

而一般来说,String S="abc";这种语句是不会报错的,那我在switch里给R,S赋值,为啥就要先初始化呢?

从你的代码出发,你使用String R,S;,如果你下面的所有条件语句都不满足,那么最后一句System.out.println(R+S);该打印什么呢,只能报错,为了杜绝这种现象,java编译器只能默认让你初始化对象了

因为有可能条件都不满足, 而你最后还要输出R和S, 所以必须得先初始化

您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您可以仔细阅读看是否解决了您的问题。

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~