我们知道创建一个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创建的字符串在内存中的表现形式可以看下图就明白了。

Java中创建String的两种方式差异相关推荐

  1. Java中创建String的两道面试题及详解

    转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd";String str2 ...

  2. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  3. Java并发基础01. 传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  4. 【并发技术01】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承 Thread 类,并重写 run() 方法:二是实现 Runnable 接口,覆盖接口中的 run() 方法,并把 Runnable 接口的实现扔给 T ...

  5. java jobdetail_Spring创建JobDetail的两种方式

    一.Spring创建JobDetail的两种方式 定时任务两种方式,Spring很好的封装使用Quartz的细节,第一种方式是利用SPring封装的Quartz类进行特定方法的实现,第二种是通过透明的 ...

  6. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  7. java中实现同步的两种方式:syschronized和lock的区别和联系

    转载自 http://www.cnblogs.com/xiohao/p/4151408.html Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用s ...

  8. Java中Http连接的两种方式

    在java中连接http,介绍两种方法,一种是java的HttpUrlConnection,另一种是apacha公司的httpClient,后者是第三方的类库需要从外部,导入,同时这也是第一次使用外部 ...

  9. Java中创建线程的三种方式

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)继承Thread类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. ...

最新文章

  1. CSS选择器和参考手册
  2. clion 格式化代码 设置空行 最多保留一行
  3. pytorch 笔记:torch.distributions 概率分布相关(更新中)
  4. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
  5. 单身萌妹纸手把手教你用产品思维追女生
  6. 王道计算机考研 数据结构 (图-上)
  7. Redis sorted_set实现点赞功能
  8. Android 监听home键(android:launchMode=singleTask 与 onNewIntent(Intent intent) 的用法
  9. Response缓冲区
  10. eclipse开发jsf_在Eclipse上创建JSF / CDI Maven项目
  11. linux安装虚拟环境virtualenv
  12. _UICreateCGImageFromIOSurface 使用API
  13. 华为P30系列再曝光:屏幕参数揭晓 还要用水滴全面屏?
  14. css 精灵图的使用
  15. [转载] Python 递归函数
  16. javascript DOM操作
  17. C# WinForm 开软件窗口居中 任意时刻窗体居中
  18. 初步解决网同客户端升级后局域网不能上网的问题
  19. sql中常见sqlcode原因分析
  20. canvas 画空心圆 实心圆

热门文章

  1. OpenCV3.3中 K-最近邻法(KNN)接口简介及使用
  2. Ubuntu14.04 64位机上安装cuda8.0+cudnn5.0操作步骤
  3. c7pro android7,三星c7pro和iphone7哪个值得买?三星Galaxy c7 pro和苹果iphone7区别对比详细评测...
  4. android联动动画,利用 CollapsingToolbarLayout 完成联动的动画效果
  5. linux c时间戳转换,Android C/C++代码中将时间戳转换为标准时间
  6. matlab 画 矩阵点,在MATLAB中绘制矩阵中点之间的线
  7. mesh threejs 属性_Threejs构建mesh
  8. 扬州市大学计算机专业录取分数线,“计算机网络技术”专业录取分数线
  9. php显示服务器文件,php-无法显示从新服务器下载文件的进度(在以前的服务器上工作)...
  10. Java项目:在线考试系统(单选,多选,判断,填空,简答题)(java+Springboot+ssm+mysql+html+maven)