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.栈:数据可以共享,存放基本数据类型和对象的引用,其中对象存放在堆中,对象的引用存放在栈中: 当在一段代码块定义一个变量时,就在栈中 为这个变量分配内存空间,当该 ...
随机推荐
- Liferay的架构:缓存(第一部分)
这次,我将要涉及到一个非常重要的概念:缓存.在当今的web应用中,如果没有设计一个比较好的缓存系统,在web中就不可能有一个良好的性能.所以我将要 提到的缓存不仅仅能够更好地理解Liferay架构,而 ...
- Python爬虫小白入门(五)PhatomJS+Selenium第二篇
一.前言 前文介绍了PhatomJS 和Selenium 的用法,工具准备完毕,我们来看看如何使用它们来改造我们之前写的小爬虫. 我们的目的是模拟页面下拉到底部,然后页面会刷出新的内容,每次会加载10 ...
- MVC源码解析 - Http Pipeline 解析(下)
接上一篇, 我在 HttpModule 的Init方法中, 添加了自己的事件, 在Pipeline里, 就会把握注册的事件给执行了. 那么Pipeline是如何执行并且按照什么顺序执行的呢? 现在我们 ...
- ProgrammingContestChallengeBook
POJ 1852 Ants POJ 2386 Lake Counting POJ 1979 Red and Black AOJ 0118 Property Distribution AOJ 0333 ...
- Secondary Namenode - What it really do?
原文链接:http://blog.madhukaraphatak.com/secondary-namenode---what-it-really-do/ Secondary Namenode is o ...
- google的作恶与不作恶
Google刚刚出现时,那时互联网还似桃花源,路不拾遗夜不闭户,最多升级升级病毒库.Google的发展,从商业模式上带来了广告对互联网无孔不入的渗透,如今Google.百度.阿里等各大巨头都有自己的广 ...
- CentOS7 install vsftpd
#mkdir -p /var/ftp/xcl/ #yum install -y vsftpd#useradd -g ftp -M -d /var/ftp/xcl -s /sbin/nologin xc ...
- jquery ColorPicker 颜色选择器
$(function() { $('#colorpickerField').ColorPicker({ onSubmit: function(hsb, hex, rgb, el) { $(el).va ...
- Redis安装(CentOS7/tar.gz)
1. 将安装包redis-3.2.0.tar.gz上传到linux系统,位置随意. 2. 解压文件 .tar.gz 3. 解压后会在当前目录生成文件夹“redis-3.2.0”,将其拷贝到" ...
- javaScript设计模式之常用工厂模式
工厂函数 定义 由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类对象. 使用场景 比如说你是到一个买宠物的店,里面有很多不同的宠物,你只需要说出宠物的名字给店员就行了. // 狗的类 ...