java - String 浅谈
/**
* String s1 = "a";
* 编译器会先检查常量池中是否已经有"a":
* 如果没有,则在常量池先创建,后引用.
* 如果有,则直接引用;
* 所以执行该语句,会产生0个或1个对象.
* 这里,会创建1个对象.
*/
String s1 = "a";
/**
* String s2 = new String("a");
* 编译器先在堆中创建一个对象,然后去常量池中检查是否已有"a":
* 如果没有,则先在常量池创建,然后将堆中的引用指向常量池的对象;
* 如果有,则直接将堆中的引用指向常量池中的对象;
* 所以执行该语句,会产生1个或2个对象.
* 这里,会创建1个对象.
*/
String s2 = new String("a");
System.out.println(s1==s2); //false
以上代码,在jvm简单内存图可简述为:

而以上==比较的会是对象的地址,所以结果为false
另外:
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " "); //true.
System.out.print((Other.hello == hello) + " "); //true.
System.out.print((spt.common.use.str.other.Other.hello == hello) + " "); //true.
//使用反编译器查看,发现编译器已将"Hel"+"lo"编译为Hello
System.out.print((hello == ("Hel"+"lo")) + " "); //true.
//将变量和字符串使用连接符连接,在运行期才会创建,存储在堆中.
System.out.print((hello == ("Hel"+lo)) + " "); //false.
//调用intern方法,首先会到字符串常量池中查找,若已有,则不再创建,直接将引用指向常量池的对象.
System.out.println(hello == ("Hel"+lo).intern()); String a = "a";
//两侧都会在运行期间在堆中创建对象.
System.out.println((a + "b") == (a + "b")); //false.
java - String 浅谈的更多相关文章
- 【推荐】JAVA基础◆浅谈3DES加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- C++ string (浅谈)
浅谈string <string> typedef basic_string<char> string; 本篇主要内容是简单地介绍 string类 在竞赛方面较实用的一些功能, ...
- Java中Integer和String浅谈
Java中的基本数据类型有八种:int.char.boolean.byte.long.double.float.short.Java作为一种面向对象的编程语言,数据在Java中也是一种对象.我们用基本 ...
- Java:浅谈InputStream的close方法
原则:最好在任何时候使用InputStream或者OutputStream的时候,在finally中调用close()方法,显式关闭. 一个典型的示例 InputStream in = null; t ...
- 【JAVA】浅谈java内部类
一.什么是内部类? 到底什么是内部类呢?通俗的讲,就是在类内部定义的类,包括定义在一个类的方法外面.方法里面或者代码块中. 二.为什么要使用内部类? 为什么我们要不走寻常路,把一个类定义在另一个类的内 ...
- 【JAVA】浅谈java枚举类
一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...
- java - 异常浅谈
java提供异常处理机制中,可以分为RuntimeException和checked Exception两种. RuntimeException 是运行时异常,是程序本身无法解决的.例如,对于一个用户 ...
- 通过Java代码浅谈HTTP协议
最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...
- java序列化浅谈
首先大家进来第一个疑问肯定是"什么是序列化?为什么要使用序列化?怎么实现一个简单的序列化案例?" 1.序列化就是把对象以一种规范的二进制形式存在内存中,另一边以反序列化方式获取: ...
随机推荐
- WordPress RokIntroScroller插件‘thumb.php’多个安全漏洞
漏洞名称: WordPress RokIntroScroller插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-383 发布时间: 2013-09-24 更新时间: ...
- HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))
扫雷 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
- bzoj 3626 [LNOI2014]LCA(离线处理+树链剖分,线段树)
3626: [LNOI2014]LCA Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1272 Solved: 451[Submit][Status ...
- Bzoj 1856: [Scoi2010]字符串 卡特兰数,乘法逆元,组合数,数论
1856: [Scoi2010]字符串 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1194 Solved: 651[Submit][Status][ ...
- 批处理find&findstr命令--众里寻他一次度
find 使用 Command: find [/v][/c][/n][/i] "string" [[drive:][path]filename] Parameter: /v 显示所 ...
- [LeetCode] 234. Palindrome Linked List 解题思路
Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ...
- Eclipse插件收藏列表
viPlugin 2.11.0 AnyEdit Tools 2.4.4 EclipseColorer 0.8.0 PyDev – Python IDE for Eclipse 2.7.5 MoreUn ...
- php中数组可以不写下标
<?php $array[10] = 10; for($i = 0; $i < 100; $i++){ $array[] = $i; } var_dump($array) ?> $a ...
- hdoj 1564 Play a game
Play a game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 用JAX-WS在Tomcat中公布WebService
JDK中已经内置了Webservice公布,只是要用Tomcat等Webserver公布WebService,还须要用第三方Webservice框架. Axis2和CXF是眼下最流行的Webservi ...