java学习-关于字符串String
有必要总结记录一下java的学习,否则,永远只是记忆碎片化和always google(费时)
刚好,小伙伴给了一份自己做的review,在学习的过程中,update一下自己的见解和学习内容;
关于String:
package string_keywords;
/**
* 参考url: http://developer.51cto.com/art/201106/266454.htm
*
* 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
*
* 当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量;
* 多个常量连接;如果是像代码里s7的方式,字符串保存在堆?
*
* 当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;
*
* http://www.importnew.com/10756.html
*
* */
public class Demo1 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "bcd";
String s3 = s1; //引用赋值,相当于s3 也指向了“abc”这个地址
String s4 = "abc";
String s5 = new String("abc");
String s6 = "ab"+"c";
String s7 = new String("ab")+"c";
String s10 = "c";
String s11 = "ab"+s10;
s1 += s2;//字符串的连接时,实际上是新开辟了一个字符串
System.out.println(s1);
System.out.println(s3);
System.out.println(s1 == s3);
System.out.println("s4==s3:"+(s4==s3)); //字符串常量池,s4 = "abc"实际上是指向了已有的abc的地址,因此用==判断时,指向一致,所以返回true
System.out.println("s5==s3:"+ (s5==s3)); // new String 的方式不同于直接赋值(常量池),而是新开辟了一个空间,因此判断字符串是否相等一般采用equals方法
System.out.println("s6==s3:"+(s6==s3)); //常量连接常量,还在常量池
System.out.println("s7==s3:"+(s7==s3)); //new的方式,不再是常量
String s8 = s4.intern();
String s9 = s5.intern();
System.out.println("s8==s3:"+(s8==s3));
System.out.println("s8==s4:"+(s8==s4));//s4本来就是指向常量池的,返回的intern地址当然也就是本身了
System.out.println("s9==s3:"+(s9==s3));// intern方法会去常量池查找是否存在该字符串常量,有则返回其地址,没有就加入常量池并返回地址
System.out.println("s11==s3:"+(s11==s3)); //在运行时通过连接计算出的字符串是新创建的
/*
* 疑问: String s = "a" +"bc";
* 我们知道a和bc是常量,abc存在于常量池,那么a和bc是否也存在于常量池?
* 如何验证呢?
*
* 内存跟常量池是什么关系?
* 为什么上述方式一般不推荐,而推荐使用StringBuffer,是因为扩大了常量池么?
*
* */
}
}
intern()补充:
String s8 = s4.intern();
String s9 = s5.intern();
System.out.println("s8==s3:"+(s8==s3));//true
System.out.println("s9==s3:"+(s9==s3));//true
目前存在的疑问是:
1. 内存跟常量池的更深入理解
2. intern()方法是否对常量池做的是一种动态的update?
java学习-关于字符串String的更多相关文章
- Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式
一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...
- Java学习笔记--字符串和文件IO
1.Java中的字符串类和字符的表示 2.区分String,StringBuilder和StringBuffer 3.从命令行中给main方法传递参数 4.文件操作 1 Java中的字符串和字符 1. ...
- java学习笔记之String类
String类总结 String类概述: java.lang.String 类是字符串操作类 String类的常用构造方法: //1.直接赋值 String str= "hellojava& ...
- java中的字符串String
一.String简介d 参考:https://www.cnblogs.com/zhangyinhua/p/7689974.html String类代表字符串. java.lang.String: Ja ...
- java学习day01之String的特点,如何实现,并且有哪些重要方法?
1.以主流的JDK版本1.8来说,String内部实际存储结构为char数组,源码如下: public final class String implements java.io.Serializa ...
- Java学习之字符串的创建
转自:http://lavasoft.blog.51cto.com/62575/80034/ Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时 ...
- 3.2常用类(java学习笔记)String与StringBuffer
一.String String又称不可变字符序列. 我们看JDK源码中用于字符存储的数组有final修饰,final修饰变量就代表变量不能改变. 我们可以看API文档中对String的描述. Stri ...
- java学习笔记之String.Split方法
hello 大家好,好久不见,今天 我们要讨论的是java的split方法,或许你很早就知道了,但你真的知道吗? 我们来看看吧. 首先我们来看看我们最常用的split()方法也就是单个参数的方法 pu ...
- Java学习之字符串类
String在Java中是一个类类型(非主类型),是一个不可被继承的final类,而且字符串对象是一个不可变对象.声明的String对象应该被分配到堆中,声明的变量名应该持有的是String对象的引用 ...
随机推荐
- 设计模式--组合模式Composite(结构型)
一.概念 组合模式允许你将对象组合成树形结构来表现"整体/部分"层次结构.组合能让客户以一致的方式处理个别对象以及对象组合. 二.UML图 1.Component(对象接口),定义 ...
- [正则表达式]PCRE环视功能
设想一下这个问题,假设为了方便长串数字的阅读性,需要为其添加逗号作为分隔,需要怎么做呢? 2569836495 => 2,569,836,495 正则表达式的匹配通常是从左往右的,这导致无法使用 ...
- mysql nonInstall 版本的安装与配置
最近用到mysql,发现如果想使用最新版本64 bit mysql 需要独特的配置和使用方式 结合最近的研究总结一下安装过程. 首先下载:http://dev.mysql.com/downloads/ ...
- Python之Web前端jQuery扩展
Python之Web前端: 一. jQuery表单验证 二. jQuery扩展 三. 滚动菜单 一. jQuery表单验证: 任何可以交互的站点都有输入表单,只要有可能,就应该对用户输入的数据进行验证 ...
- 响应者链条,如何获取最佳的点击view 以及内部实现
事件的产生与传递 事件是如何产生与传递的? 当发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中. UIApplication会从时间队列中取出最前面的时间,并将事件 ...
- 发布报错:Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store
发布报错:Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store 昨晚上传项目到AppStore,报了这个错,纳尼! ...
- cnblogs技术知识共享
首先,我非常感谢cnblogs这么好的一个平台给我们这些计算机方面的人提供这么一个共享的平台! 其次,我希望大家共享知识,共同交流进步! 然后,如果在转载中侵犯了您的权益,请直言,会立刻删除.
- V4.0到来了,css雪碧图生成工具4.0更新啦
V3.0介绍 http://www.cnblogs.com/wang4517/p/4476758.html V4.0更新内容 V4.0下载地址:http://download.csdn.net/det ...
- python-opencv笔记 图像的读取和简单几何图形绘制
- CozyRSS开发记录9-快速实现一个RSS解析器
CozyRSS开发记录9-快速实现一个RSS解析器 1.再读RSS标准 既然需要自己实现一个RSS解析器,那自然需要仔细的读一读RSS的标准文档.在网上随便找了两份,一份英文一份中文: http:// ...