黑马程序员技术交流社区
标题:
有关字符串的问题
[打印本页]
作者:
代文娟
时间:
2013-11-8 18:52
标题:
有关字符串的问题
为什么下述代码引起NUllPointerException异常?
class Test
{
private String text;
public Test(String s)
{
String text=s;
}
public static void main(String[] args)
{
Test test=new Test("ABC");
System.out.println(test.text.toLowerCase());
}
}
复制代码
作者:
寻丶丶觅
时间:
2013-11-8 18:57
NUllPointerException 空引用异常? 这个百度下吧
你在类里声明了一个String引用text,在构造函数中又定义了一个同名text引用。构造函数中写成this.text
作者:
寻丶丶觅
时间:
2013-11-8 18:59
补充一下,直接写text = s;也是可以的 因为传入的参数名为s,不强调也可以
作者:
零下五度的水
时间:
2013-11-8 19:05
public Test(String s)
05. {
06. String text=s;
07. }
你的构造不是给字段传值,是新建了一个同名变量
作者:
冯国强
时间:
2013-11-8 20:04
class Test
{
private String text;
public Test(String s)
{
String text=s;
}
public static void main(String[] args)
{
Test test=new Test("ABC");
System.out.println(test.text.toLowerCase());
}
}
这里问题是构造函数中的问题,从主函数执行,先建立对象。建立对象时,将“ABC”赋值给构造函数中的变量text。执行完后,因该变量是局部变量。所以内存释放。而Test类中的私有变量text就会发生空引用异常。所以后面的就没执行。
作者:
魏-玉-彪
时间:
2013-11-8 23:34
class Test
{
private String text; //此处没有初赋值
public Test(String s)
{
String text=s; //此处重新定义了 text局部变量,覆盖了 text 成员变量所以,并没有给成员变量赋值
// 此处去掉 改为 text=s; 或this.text =s;
}
public static void main(String[] args)
{
Test test=new Test("ABC");
System.out.println(test.text.toLowerCase());
}
}
复制代码
private String text;
没有完成初始化,
而 String是引用数据类型,,没有初始化地址指针就就没有地址可指,自然是空指针异常
作者:
何丛
时间:
2013-11-9 07:39
class Test
{
private String text;
public Test(String s)
{
String text=s;
}
public static void main(String[] args)
{
Test test=new Test("ABC");
System.out.println(test.text.toLowerCase());
}
}
构造函数初始化的时候,先将字符串"ABC"的在堆内存中的首地址传给s,然后在将s所指向的引用地址即"ABC"的首地址传给构造函数内定义的text,因为text是在构造函数内定义,属于局部变量,构造函数执行结束后,text所占用的栈内存空间就会被回收。成员变量private String text;会被默认初始化为null,引用为空值的对象调用其本身的函数会抛出空指针异常。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2