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创建的字符串在内存中的表现形式可以看下图就明白了。
Java中创建String的两种方式差异相关推荐
- Java中创建String的两道面试题及详解
转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd";String str2 ...
- Java中HashMap遍历的两种方式
第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...
- Java并发基础01. 传统线程技术中创建线程的两种方式
传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...
- 【并发技术01】传统线程技术中创建线程的两种方式
传统的线程技术中有两种创建线程的方式:一是继承 Thread 类,并重写 run() 方法:二是实现 Runnable 接口,覆盖接口中的 run() 方法,并把 Runnable 接口的实现扔给 T ...
- java jobdetail_Spring创建JobDetail的两种方式
一.Spring创建JobDetail的两种方式 定时任务两种方式,Spring很好的封装使用Quartz的细节,第一种方式是利用SPring封装的Quartz类进行特定方法的实现,第二种是通过透明的 ...
- Java中实现多线程的两种方式之间的区别
Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...
- java中实现同步的两种方式:syschronized和lock的区别和联系
转载自 http://www.cnblogs.com/xiohao/p/4151408.html Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用s ...
- Java中Http连接的两种方式
在java中连接http,介绍两种方法,一种是java的HttpUrlConnection,另一种是apacha公司的httpClient,后者是第三方的类库需要从外部,导入,同时这也是第一次使用外部 ...
- Java中创建线程的三种方式
Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)继承Thread类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. ...
最新文章
- CSS选择器和参考手册
- clion 格式化代码 设置空行 最多保留一行
- pytorch 笔记:torch.distributions 概率分布相关(更新中)
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
- 单身萌妹纸手把手教你用产品思维追女生
- 王道计算机考研 数据结构 (图-上)
- Redis sorted_set实现点赞功能
- Android 监听home键(android:launchMode=singleTask 与 onNewIntent(Intent intent) 的用法
- Response缓冲区
- eclipse开发jsf_在Eclipse上创建JSF / CDI Maven项目
- linux安装虚拟环境virtualenv
- _UICreateCGImageFromIOSurface 使用API
- 华为P30系列再曝光:屏幕参数揭晓 还要用水滴全面屏?
- css 精灵图的使用
- [转载] Python 递归函数
- javascript DOM操作
- C# WinForm 开软件窗口居中 任意时刻窗体居中
- 初步解决网同客户端升级后局域网不能上网的问题
- sql中常见sqlcode原因分析
- canvas 画空心圆 实心圆
热门文章
- OpenCV3.3中 K-最近邻法(KNN)接口简介及使用
- Ubuntu14.04 64位机上安装cuda8.0+cudnn5.0操作步骤
- c7pro android7,三星c7pro和iphone7哪个值得买?三星Galaxy c7 pro和苹果iphone7区别对比详细评测...
- android联动动画,利用 CollapsingToolbarLayout 完成联动的动画效果
- linux c时间戳转换,Android C/C++代码中将时间戳转换为标准时间
- matlab 画 矩阵点,在MATLAB中绘制矩阵中点之间的线
- mesh threejs 属性_Threejs构建mesh
- 扬州市大学计算机专业录取分数线,“计算机网络技术”专业录取分数线
- php显示服务器文件,php-无法显示从新服务器下载文件的进度(在以前的服务器上工作)...
- Java项目:在线考试系统(单选,多选,判断,填空,简答题)(java+Springboot+ssm+mysql+html+maven)