JAVA中String(字符串)课堂总结
一:Java编译器中关于字符串自动优化
例子一:
源代码:
public class StringPool {
public static void main(String args[])
{
String s0="Hello";
String s1="Hello";
String s2="He"+"llo";
System.out.println(s0==s1);//true
System.out.println(s0==s2);//true
System.out.println(new String("Hello")==new String("Hello"));//false
}
}
结果截图:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAANMAAABtCAIAAAC0pcOLAAACG0lEQVR4nO3ay23qUBRAUeqiINdDNW4mxfgNiOz7sDGgRNqDrDULPzHYOjfY57JA4VJ/Af4o5dFQHo21vK/b9TLN5VfhT1Eejctyj+4/19vXsizLPF2m2/rcPct5WvscWx0+Qr6842zmzdMa4VrcYXnDg8s8re+B516UtxtgR+U9zkzl8dpvlGfM8bntqsq+nyfl3V91H3TraevfOz4zXM/bDs3hF8aup/VV19ttOvqFYf7xDleSaSiPhvJoKI+G8mgoj4byaNhVoaE8GrakaNiSomFLioYtKRq2pGjYkqLhSjIN5dFQHg3l0VAeDeXRGMvbXVY5Mk/uz/ILhvI+uBVhsYWf2sr7pCbl8VOHW1LfUa0H6+5s3ZU3fMQ2N61O8dx7M+/xuce/X+wW2Clg57S8ceidlvc93Q4ecjeXYyflDYPq1czb3jHur4iN556X93W7Dksr5zPv6BmrU5w5O23Xw3ZYiHo8RPdLydtnWJ3iOfcwaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaCiPhvJoKI+G8mgoj4byaPwD7qRCrnGlhnYAAAAASUVORK5CYII=" alt="" />
分析:1:在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对象。
2:编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java编译器自动完成。
3:当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。
例子二:
源代码:
public class qqq {
public static void main(String[] args) {
String s1="a";
String s2=s1;
System.out.println(s1==s2);
s1+="b";
System.out.println(s1==s2);
System.out.println(s1=="ab");
System.out.println(s1.equals("ab"));
}
}
结果截图:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJ0AAABZCAIAAACrPbEjAAACPElEQVR4nO3cv2rbQBzA8XuBQN4hWyAQAiEg8NTSTqFTxy4laO+b6Gm01mRKhjQQLwbPoY9xHWTOF+lsE4oi+8v3s/mvhq9Pce5nFKJG8/nL95PTs4fHp+7mw+PT+cVsuVz+nt9fXn0a9dBh1HdXz+23H/P5/WKxuL75OuqB7PqhXl//nl/Mft79+vP8MuqBQoyrpgp1O+pR9NHsyhTeqppVjDG2daibplrf2UVv61Q//ySs0tP8cByQ8npt65Q49Sx2ze6MbZ1eo6lt7TpYfKWu2WLNl7sm939dXaKHKsRSnS1du2d1izSdh/2zeohCjPnpNPveNKiVnlU1TV363uTaPRzuSzDZlcmuTHZlsiuTXZm6roN/dEra2n3goxFifNe2kcOf4xDi+1rZ9Tj05nTrZOmUOzjrDrpm+02bNe/wbmr71mv/sf7tPRMCJwMT2dI1X7A7u65XZuEud42nVOyaLbJ963XzinzGY8qplbqumiob7Oxer6VHHN5Nr3weTqfhbCTXP70OfzCxeQ+Hd1Nzv4nJrkx2ZbIrk12Z7MrknI7JOR2Tczom53RMzumYnNMxOadjck7H5JyOyf0mJrsy2ZXJrkx2ZbIrk12ZvD4ik12ZenM6r3sJ4XUvmbzuJZPXvWTyupdMXveSyX0JJrsy2ZXJrkx2ZbIrk12Z7MpkVya7MtmVya5MdmWyK5NdmezKZFcmuzLZlcmuTHZlsiuTXZnsymRXJrsy2ZXJrkx2ZbIrk12Z7MpkV6Z/cZ/eTrIlfSoAAAAASUVORK5CYII=" alt="" />
分析:
1:给字串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象“a”!
2:String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;
3:代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。
JAVA中String(字符串)课堂总结的更多相关文章
- Java中String字符串常量池总结
最近到广州某建站互联网公司面试,当时面试官问假设有两个字符串String a="abc",String b = "abc";问输出a==b是true还是fals ...
- java中String字符串的==解析
今天不知道怎么看了下string的==的问题,本身我觉得我这个水平去判断几个字符串相等还能出问题?呵呵,真的出了大问题,根本原因在于对java字节码的不了解. 首先,==运算符比较的是两个变量所指向的 ...
- Java中String字符串常量池
首先看一个例子,通过这个例子更能快速理解String常量池 public static void main(String[] args) { String a = "ab"; St ...
- java中String字符串
一.定义String字符串 String字符串和char字符不同,char使用单引号,只能表示一个字符,字符串就是一段文本.String是个类.这个类使用final修饰,所以这个类是不可以继承扩充和修 ...
- java中String字符串的替换函数:replace与replaceAll的区别
例如有如下x的字符串 String x = "[kllkklk\\kk\\kllkk]";要将里面的“kk”替换为++,可以使用两种方法得到相同的结果 replace(CharSe ...
- Java中String字符串toString()、String.valueOf()、String强转、+ ""的区别
Object#toString(): Object object = getObject(); System.out.println(object.toString()); 在这种使用方法中,因为ja ...
- JAVA中String字符串比较equals()和equalsIgnoreCase()的区别
标签: equals和equalsIgnoreC 2012-11-11 16:03 65644人阅读 评论(0) 收藏 举报 分类: JAVA(3) 1.使用equals( )方法比较两个字符串是 ...
- Java中的字符串操作(比较String,StringBuiler和StringBuffer)
一.前言 刚开始学习Java时,作为只会C语言的小白,就为其中的字符串操作而感到震撼.相比之下,C语言在字节数组中保存一个结尾的\0去表示字符串,想实现字符串拼接,还需要调用strcpy库函数或者自己 ...
- java中string内存的相关知识点
(一):区别java内存中堆和栈: 1.栈:数据可以共享,存放基本数据类型和对象的引用,其中对象存放在堆中,对象的引用存放在栈中: 当在一段代码块定义一个变量时,就在栈中 为这个变量分配内存空间,当该 ...
随机推荐
- 给你的git仓库瘦身
很久没有写博客了,最近遇到了一个git问题,比较典型,记录下来与大家分享. 我们使用git版本控制的时候享受了很多便利,不管是代码合并,分支提供给我们的并发,但我们也往往忽略了每次提交之后在我们本地项 ...
- Spring MVC---数据绑定和表单标签
数据绑定和表单标签 数据绑定 数据绑定是将用户输入绑定到领域模型的一种特性,在Spring MVC的controller和view数据传递 ...
- 文件上传<springmvc>
使用commons-fileupload-1.3.1.jar和commons-io-2.4.jar web.xml <?xml version="1.0" encoding= ...
- C语言之位运算
位运算 1).定义. 指的是1个二进制数据的每一位来参与运算. 位运算的前提: 是这个数必须是1个二进制. 注意: a). 参与位运算的二进制数据必须是补码形式. b). 位运算的结果也是二进制的补码 ...
- jquery开头
jQuery(function(){});jQuery().ready(function(){}); 绑定点击事件: jQuery('#temp').click(function() {}); $(d ...
- openstack私有云布署实践【9.2 Glance镜像管理(办公网环境)】
首先登录controller1创建glance数据库,并赋于远程和本地访问的权限. mysql -u root -p CREATE DATABASE glance; GRANT ALL ...
- 移动APP脚本录制
1.安装补丁--LR_03105_patch4----mobile app(http/html) 2.录制软件和移动设备同处同一环境(160wifi连接移动设备),创建wifi热点 3.创建脚本-协议 ...
- [SQL基础教程] 4-2 数据删除(DELETE)
[SQL基础教程] C4 数据更新 4-2 数据删除(DELETE) DROP TABLE / DELETE DROP TABLE - 完全删除表 DELETE - 仅删除数据,保留表容器 DELET ...
- 将mysql的data目录移走方法
如移动到"/home/mysql/data",我的mysql是装在/usr/local/mysql下的 1. 将/usr/local/mysql/data移动到/home/mysq ...
- logstash通过kafka传输nginx日志(三)
单个进程 logstash 可以实现对数据的读取.解析和输出处理.但是在生产环境中,从每台应用服务器运行 logstash 进程并将数据直接发送到 Elasticsearch 里,显然不是第一选择:第 ...