关于String声明的一个问题

bingdongya 2004-07-15 09:27:04
public static void main(String[] args) throws IOException
{
BufferedReader in = new BufferedReader(new FileReader("D:\\1.sql") );
String s2,s = new String();

while((s = in.readLine())!=null) {
s2 += s + "\n";
}
in.close();
System.out.println("s2===>" + s2);
}
这段程序 String s2,s = new String();
编译说我没有对s2初始化,
如果 String s,s2 = new String();
这样就能正常通过,
这是为什么呀?
...全文
161 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianzhiyu 2004-07-15
  • 打赏
  • 举报
回复
s2+=s+"\n" 即s2=s2+s+"\n" 表达式中存在没有初始化的变量s2
lixiang823517 2004-07-15
  • 打赏
  • 举报
回复
String s2,s = new String();
这样是申明了s2和s,但是只初始化了s
String s,s2 = new String();
这样是申明了s和s2,但是只初始化了s2
String s,s2=new String();不等同于String s=new String();String s2=new String();
j2nix 2004-07-15
  • 打赏
  • 举报
回复
java里重要的一点:局部变量必须在始用前初始化。

编译的提示是s2“可能”没有初始化,也就是说while条件不一定成立,那么打印s2当然就不行了。
但,s却不同,它在使用前是初始化了的。
areshong 2004-07-15
  • 打赏
  • 举报
回复
s2你未初始化就引用了
iorisiori 2004-07-15
  • 打赏
  • 举报
回复
String s2,s = new String();不能这样偷懒
Arias 2004-07-15
  • 打赏
  • 举报
回复
需要这样的考虑的!

你的s2 += s + "\n";本身其中还涉及到一个原始的s2的值的问题,肯定需要
但是你的String s2,s = new String(); 只是定义一个存储的空间,根本不能替代原始的初值

但是你的s 由于 是s = in.readLine())的那么只需要一个空间就可以那

所以编译会认为你的s2没有初始化!
rainworm 2004-07-15
  • 打赏
  • 举报
回复
String s2,s = new String();
相当于声明String s2;
String s=new String();
在java rules这书里String s2,s = new String();这种做法是不提倡的
draco2002 2004-07-15
  • 打赏
  • 举报
回复
因为你这个语句有问题:String s2,s = new String();
JAVA是个严谨的语言,跟VB不一样,你这样写的话只是初始化了s,而s2并没有被初始化。
String s2 = null;
String s = null;
wulemale 2004-07-15
  • 打赏
  • 举报
回复
s2 += s-->s2=s2+s-->s2和s都需要初始化,因为为s = in.readLine()因此只要s2初始化就可以了

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧