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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 theape 于 2016-9-4 17:27 编辑

[Java] 纯文本查看 复制代码
private static void demo() {
        // 字符串常量 与 字符串常量拼接不会产生新的对象
        // 字符串拼接如果出现变量就会产生新的对象。
        int a = 2;
        int b = 3;
        final int af = 2;
        final int bf = 3;
        String c ="23";
        String d = a + "" + b;
        String e = 2 + "" + 3;
        String f = af + "" + bf;
        System.out.println(a + b + "");                //先求a+b的值再拼接
        System.out.println(a + "" + b);                //a与字符串常量拼接,字符串常量与b拼接
        System.out.println("" + a + b);                //字符串常量与a拼接,字符串常量与b拼接
        System.out.println(c == d);                        // false 变量拼接的会产生新的对象
        System.out.println(c == e);                        // true 常量拼接,不会产生新的对象
        System.out.println(c == f);                        // true final修饰的为常量,同上
}

private static void demo4() {
        final String s1 = "a";
        final String s2 = "b";
        String s3 = "ab";
        String s4 = s1 + s2;                //s1和s2都是常量
        System.out.println(s3 == s4);
}

private static void demo3() {
        //字符串与字符串对象拼接,会创建新的实例,变成三个对象
        //字符串与字符串(或强转为字符串的基本类型值)拼接不会创建新的实例,保留一个对象。
        String s1 = "我是String";
        String s2 = new String("我是String");
        s2 = s1 + "";                        //false
        s2 = "我是String";                //true
        s2 = "我是" + "String";        //true
        s2 = "我是String" + "";        //true
        s2 = "" + new String("我是String");        //false
        
        System.out.println(s1 == s2);
}

private static void demo2() {
        String s = null;
        System.out.println("s赋值为null打印输出:" + s);
        System.out.println("null打印输出为:" + null);
        System.out.println(s + "a");
        System.out.println("2" + 3);
        System.out.println(3 + "2");
        
        int[] arr = new int[5];
        System.out.println("数组的地址:" + arr);
        arr = null;
        System.out.println("数组赋值为空:" + arr);
}

private static void demo01() {
        //空指针异常
        String s = null;
        System.out.println(s + "可以拼接字符串"); //输出null不报异常
        System.out.println(s.length());
        if ((s != null & s.length()==0)){}
}

最后我总结出来一句:
字符串常量 与 常量拼接不会产生新的对象,字符串拼接如果出现变量就会产生新的对象。
ps:先弄清楚什么是字符串常量
"这是一种字符串常量"
final String s = "这又是一种字符串常量";
final int a = 1;   //这种常量与字符串常量拼接时会强转为字符串常量

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马