zoukankan      html  css  js  c++  java
  • Java中创建String的两种方式差异

    我们知道创建一个String类型的变量一般有以下两种方法:

    String str1 = "abcd";
    String str2 = new String("abcd");

    那么为什么会存在这两种创建方式呢,它们在内存中的表现形式各有什么区别?

    方法1:

    String a = "abcd";
    String b = "abcd";
    
    System.out.println(a == b);      // true
    System.out.println(a.equals(b)); // true

    解析:
    用""创建的a,b两个字符串,==和equals比较返回都为true,这是因为a,b都指向了方法区的同一个字符串。所以,当同样的一个字符串用""重复创建时只在方法区创建一次。

    方法2:

    String c = new String("abcd");
    String d = new String("abcd");
    
    System.out.println(c == d);      // false
    System.out.println(c.equals(d)); // true

    解析:
    用new创建的c,d两个字符串,equals为true很简单因为equals永远比较的是值,而==为false说明两个字符串的引用不一样。用new创建的字符串每次都会在JVM堆中创建,所以c,d都对应堆中的两个不同的字符串。
    关于这两道题中的""和new创建的字符串在内存中的表现形式可以看下图就明白了。

  • 相关阅读:
    链路追踪
    Zuul网关
    MyBatis批量插入
    自定义组件使用v-model
    正则表达式入门
    博客园主题1【备份】
    关于我
    input输入框内容规范正则总结
    实例003:完全平方数
    python基础day5dict
  • 原文地址:https://www.cnblogs.com/rinack/p/9735520.html
Copyright © 2011-2022 走看看