public class StringTest {// static String s;//语句1public static void main(String[] args) {// String s;//语句2System.out.println("s="+s);}}
1.请问取消语句1的注释会输出什么?
2.请问取消语句2的注释会输出什么?
3.请问取消语句1和语句2的注释会输出什么?
答案与解析
跑过代码的小伙伴们都知道,输出的结果是:
1.输出s=null
2.编译不通过,错误:可能尚未初始化变量s
3.编译不通过,错误:可能尚未初始化变量s
这是为什么呢?
首先第一种情况,我们声明了一个String类型的静态成员变量s,并没有给它赋值,之后再main方法中输出“s=”+s,从结果中我们可以看到输出了“s=null”,也就是说我们可以推测出,虽然我们没有给它赋值,但是我们运行时自动给它赋值了一个null,并且在打印时会将这个null打印出来。这里为什么要用static呢?大家可以把static去了试试,自己试试看我们的编译器会给出什么样的反应?
第二种情况,我们在main函数内部定义了一个String类型的变量s,同样没给它赋值,但是编译器这次却报错了,“错误:可能尚未初始化变量s”,那就是它没有初始化,因此编译器报错了,并且无法通过编译。
第三种情况,我们声明了一个String类型的静态成员变量s,同时在main函数内部定义了一个String类型的变量s,都没给他们附初值,这个时候同样因为没有给函数内的局部变量初始化,因此编译器再次报错了,这个结果很大程度上在知道了2的情况时我们可以预料到,但是如果我们给2附上初值,输出的是2的初值还是null呢,大家可以试一试,看看会输出什么
坚持总会有回报的,大家加油!