黑马程序员技术交流社区

标题: 求助,为什么要这么定义String s = null; [打印本页]

作者: 孙松林    时间: 2012-10-26 19:35
标题: 求助,为什么要这么定义String s = null;
public static void main(String[] args) throws IOException {
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                StringBuffer sb = new StringBuffer();
                String s = null;
                while ((s=br.readLine())!=null) {
                        if ("over".equals(s)) {
                                break;
                        }
                        sb.append(s);
                        String str = new String(sb);
                        System.out.println(str.toUpperCase());
                        sb.delete(0, sb.length());
                }
        }
作者: 唐进    时间: 2012-10-26 19:49
如果你给s赋值的话,他的字会一直存放在内存中,s只是一个引用而已
作者: 刘岩喜    时间: 2012-10-26 19:51
你这个程序中,s 可以不初始化为空,因为程序必然会在 s=br.readLine()语句中初始化s
但是最好还是先初始化,这是很好的习惯,如果不初始化就调用会出现错误,一般像Eclipse会提示的。
作者: 李靖    时间: 2012-10-26 19:52
把s=null只是初始化而已,如果后面有给s赋值的话,开始时也可以不用给s赋值。不过如果没有任何的赋值,直接打印的话,会报异常,说没有初始化。
作者: 葬天    时间: 2012-10-26 19:58
java 规定
局部变量 使用前必须初始化
作者: 刘丽娜    时间: 2012-10-26 20:08
因为 局部变量在使用时要初始化吧  否则编译不过去的  不符合语法
作者: 赵红萍    时间: 2012-10-26 20:57
处于安全的考虑,java要求对所有的变量在使用前要初始化,所以在声明了一个变量后,要对它初始化,对于String类型的变量其实是一个引用类型的,就像String s ="abc",那么s 就指向了内存中的一个地址,这个地址存放了字符串abc,但是如果,你声明变量的值是要在程序运行以后,由程序给赋值,那么就可以给s 赋值为null,表示是个空的引用,避免s 指向其他的内存地址
作者: 徐升兴    时间: 2012-10-26 21:46
这个问题我之前思考过,因为java是一个强类型的语言,在定义成员变量的时候需要赋一个初始值。这样做是为了安全问题,如果你不定义初始值,程序也不会出错,但是在某些情况的时候程序就会出问题的。
所以在定义的时候最好还是定义一个初始值,养成一个良好的编程习惯
作者: 张其辉    时间: 2012-10-26 22:53
这个s属于局部变量,局部变量必须要给定初始值,成员变量可以不用初始化。如果用的是Eclipse它会给你报错的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2