转自:https://blog.csdn.net/a986410589/article/details/52454492

方式一:String a = “aaa” ;

方式二:String b = new String(“aaa”);

  • 两种方式都能创建字符串对象,但方式一要比方式二更优。
  • 因为字符串是保存在常量池中的,而通过new创建的对象会存放在堆内存中。

一:常量池中已经有字符串常量”aaa”

  • 通过方式一创建对象,程序运行时会在常量池中查找”aaa”字符串,将找到的”aaa”字符串的地址赋给a。
  • 通过方式二创建对象,无论常量池中有没有”aaa”字符串,程序都会在堆内存中开辟一片新空间存放新对象。

一:常量池中没有字符串常量”aaa”

  • 通过方式一创建对象,程序运行时会将”aaa”字符串放进常量池,再将其地址赋给a。
  • 通过方式二创建对象,程序会在堆内存中开辟一片新空间存放新对象,同时会将”aaa”字符串放入常量池,相当于创建了两个对象

测试:

public class StringNewTest {
public static void main(String[] args) {
String a = "aaa";
String b = "aaa";
String c = new String("aaa");
System.out.println("a==b:"+(a == b));
System.out.println("a==c:"+(a == c));
System.out.println("a与b的值相等:"+(a.equals(c)));
}
}

结果:

a==b:true 
a==c:false 
a与b的值相等:true

最新文章

  1. ”未在本地计算机上注册“microsoft.et.OLEDB.4.0”提供程序。“解决方案大集合
  2. [LeetCode] Missing Number (A New Questions Added Today)
  3. 使用Python脚本进行域名解析
  4. SQL中使用WITH AS提高性能
  5. POJ 1014 Dividing 多重背包
  6. USACO Chapter 1 解题总结
  7. servlet后台怎样接收对象參数
  8. java中的GC(gabage collection)如何工作
  9. Hadoop入门第二篇-MapReduce学习
  10. Docker的名字空间
  11. Max Area of Island
  12. php替换字符串函数strtr()和str_repalce()区别
  13. [jQuery]判断checkbox是否选中的3种方法
  14. git特殊命令
  15. 经常在比特币中看到的merkle树是什么?
  16. BZOJ4025 二分图 分治 并查集 二分图 带权并查集按秩合并
  17. Java ee第一周的作业
  18. 2018-2019-1 20189203《Linux内核原理与分析》第三周作业
  19. java 三目运算符
  20. IntelliJ IDEA 2017版 Spring5最基本的bean例子创建

热门文章

  1. PS:将一个图片变成圆形
  2. CopyTranslator-复制即翻译的外文辅助阅读翻译解决方案
  3. MySQL入门很简单: 1 数据库概述
  4. postman 1—官网下载及安装
  5. 安装php的memcache扩展
  6. react里面怎么引入样式
  7. 学习MyBatis之简单入门HelloWorld
  8. 使用 NetBackup 命令创建 Hyper-V 策略(命令创建其他策略也是如此)
  9. numpy+pandas+matplotlib+tushare股票分析
  10. django.template.exceptions.TemplateSyntaxError: 'article_tags' is not a registered tag library.