String字符串常量池

2020年6月9日21:26:04
评论
2,361 次浏览 326字阅读1分5秒

首先看一段这样的代码

        String str1 = "abc";
        String str2 = "abc";
        String str3 = new String("abc");
        System.out.println(str1 == str2);
        System.out.println(str2 == str3);

返回的结果为 true和false,和想象中的或许有些不一样是吧。

首先,str1在方法区中的常量池中没有找到字符串abc,所以在常量池中创建一个字符串常量,str2在常量池中找到字符串常量,返回一个引用,所以输出的为true,str3在常量池中找到abc,返回一个引用实例,并在堆中创建一个对象,所以str3创建了一个新的对象,如果把str3放在第一行会在常量池和堆中分别创建一个对象,

7z7z7z
  • 本文由 发表于 2020年6月9日21:26:04
  • 转载请务必保留本文链接:https://www.7z7z7z.cn/index.php/2020/06/09/string%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%b8%b8%e9%87%8f%e6%b1%a0/
ArrayList底层实现 编程语言

ArrayList底层实现

ArrayList底层是用数组实现的存储 特点和数组相同: 查询效率高 增删效率低 线程不安全 常用容器: 查询数据ArrayList(最常用) 增删数据常使用LinkedList 线程安全常使用Ve...
static关键字 编程语言

static关键字

为什么static方法内不能调用非静态属性,方法 static方法加载类时就已经创建在方法区,从属于类,非静态属性,方法创建对象时才创建,储存在堆,从属于对象,类加载对象不一定加载,无法找到对应属性和...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: