zoukankan      html  css  js  c++  java
  • JAVA基础知识|String a = "abc";String a = new String("abc");

    1、String a = "abc";

    首先在栈中定义了一个引用变量a,检查字符串常量池中是否已经存在"abc",如果存在直接将a指向这个地址,注意:指向的是字符串常量池中的地址;

    如果字符串常量池中不存在"abc",则进行如下操作:1、在栈中创建三个char型的值'a','b','c',然后在堆中new一个String对象,它的值是刚才在栈中创建的三个char型值组成的数组{'a','b','c'},接着这个String对象会被存放进字符串常量池中,最后将a指向这个对象在字符串常量池中的地址。

    String a = "abc";

    等效于:

    char data[] = {'a', 'b', 'c'};
    String a = new String(data);

    2、String a =  new String("abc");

    首先在栈中定义了一个引用变量a,然后在堆中new一个String对象,a指向这个对象,然后new出来的String对象再指向常量池中的abc。

     3、比较

            String a = "abc";
            String b = "abc";
            String c = new String("abc");
            String d = new String("abc");
            System.out.println(a == b);
            System.out.println(a == c);
            System.out.println(c == d);

    执行结果:

    true

    false

    false

    注意:new String("abc") 无论字符串常量池中是否存在“abc”,都会在堆中生成一个新的对象,所以a、c、d三者不相等。

    以上为个人理解,如果有误,欢迎指正。

  • 相关阅读:
    [最短路径SPFA] POJ 1847 Tram
    [强连通分量] POJ 1236 Network of Schools
    [强连通分量] POJ 2762 Going from u to v or from v to u?
    [强连通分量] POJ 2186 Popular Cows
    [宽度优先搜索] HDU 1372 Knight Moves
    php错误级别和异常处理
    php配置优化
    魔术方法和魔术常量
    事务
    mysql备份和还原
  • 原文地址:https://www.cnblogs.com/maikucha/p/13043643.html
Copyright © 2011-2022 走看看