A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙松林 注册黑马   /  2012-10-26 19:35  /  1750 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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());
                }
        }

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
如果你给s赋值的话,他的字会一直存放在内存中,s只是一个引用而已

评分

参与人数 1黑马币 +6 收起 理由
韩军博 + 6 神马都是浮云

查看全部评分

回复 使用道具 举报
你这个程序中,s 可以不初始化为空,因为程序必然会在 s=br.readLine()语句中初始化s
但是最好还是先初始化,这是很好的习惯,如果不初始化就调用会出现错误,一般像Eclipse会提示的。

评分

参与人数 1黑马币 +6 收起 理由
韩军博 + 6

查看全部评分

回复 使用道具 举报
把s=null只是初始化而已,如果后面有给s赋值的话,开始时也可以不用给s赋值。不过如果没有任何的赋值,直接打印的话,会报异常,说没有初始化。

评分

参与人数 1黑马币 +6 收起 理由
韩军博 + 6

查看全部评分

回复 使用道具 举报
java 规定
局部变量 使用前必须初始化
回复 使用道具 举报
因为 局部变量在使用时要初始化吧  否则编译不过去的  不符合语法
回复 使用道具 举报
处于安全的考虑,java要求对所有的变量在使用前要初始化,所以在声明了一个变量后,要对它初始化,对于String类型的变量其实是一个引用类型的,就像String s ="abc",那么s 就指向了内存中的一个地址,这个地址存放了字符串abc,但是如果,你声明变量的值是要在程序运行以后,由程序给赋值,那么就可以给s 赋值为null,表示是个空的引用,避免s 指向其他的内存地址
回复 使用道具 举报
这个问题我之前思考过,因为java是一个强类型的语言,在定义成员变量的时候需要赋一个初始值。这样做是为了安全问题,如果你不定义初始值,程序也不会出错,但是在某些情况的时候程序就会出问题的。
所以在定义的时候最好还是定义一个初始值,养成一个良好的编程习惯
回复 使用道具 举报
这个s属于局部变量,局部变量必须要给定初始值,成员变量可以不用初始化。如果用的是Eclipse它会给你报错的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马