Java基础之String深入解析
Java基础之String深入解析
以下是本文目录大纲
- 生成地方和地址指向,intern()方法
- String可否被继承?
1. 生成地方和地址指向,intern()方法
先看代码
String s1 = new String("abc");String s2 = "abc";String s3 = new String("abc");System.out.println(s1 == s2);System.out.println(s1 == s3);System.out.println(s2 == s3);
问题:
- s1,s2,s3分别在哪?生成了几个对象?
- 结果是什么?
先看程序运行的结果
false
false
false
解析:
String s1 = new String("abc");
"abc"
会在字符串常量池里面生成一个字符串abc
new String("abc");
会在堆里面生成 abc的对象String s2 = "abc";
由于"abc"
在字符串常量池里,所以可以直接引用String s3 = new String("abc");
“abc” 先在常量池里找,找到了就不在常量池里生成了,但是
new String("abc");
会在堆里面再生成一个对象abc
画图如下:
结论:
1. 生成3个abc对象,一个在字符串常量池里,两个在堆里
2. 结果如上
扩展加强
先看代码
String s1 = new String("abc");String s2 = "abc";String s3 = new String("abc");System.out.println(s1 == s1.intern());System.out.println(s2 == s2.intern());System.out.println(s1.intern() ==s2.intern());
备注:当使用intern()方法时,查询字符串常量池是否存在当前字符串,若不存在则将当前字符串复制到字符串常量池中,并返回字符串常量池中的引用。
问题:
- 结果是分别是什么?
解析:
s1.intern()
返回常量池里中abc对象,s1是堆对象abc,所以false
- 同理,
s2,s2.intern()
都指向字符串常量池中的对象abc,所以true
s1.intern()
和s2.intern()
都指向字符串常量池中的对象abc,所以true
画图如下:
结论:
false
true
true
2. String可否被继承?
先看代码
String s4 = "java";String s5 = "ja";String s6 = "va";System.out.println(s4 == "java");System.out.println(s4 == (s5 + s6));System.out.println(s4 == "ja" + s6);System.out.println((s5+s6)== "ja" + s6);
解析:
s4 == "java"
,都是常量池里的对象,返回true
(s5+s6)
会在堆里面生成 “java”,所以s4 == (s5 + s6)
返回false
- 同理
"ja" + s6
也会在堆里面生成 “java”,所以(s5+s6)== "ja" + s6
返回false
(s5+s6) == "ja" + s6
等号两边引用的对象虽然相同,但是生成的对象是不一样的,所以返回false
画图如下:
Java基础之String深入解析相关推荐
- Java基础之多态深入解析
Java基础之多态深入解析 多态的基本概念 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性.简单的说:就是用基类的引用指向子类的对象. 多态的优点 消除类型之间的耦合关系 ...
- Java基础:String类
相关阅读 Java基础:String类 Java字符串格式化 Java基础:正则表达式 1. 概述 字符串是由多个字符组成的一串数据(字符序列),字符串可以看成是字符数组. 在实际开发中,字符串的操作 ...
- Java基础之String,StringBuilder,StringBuffer三者的区别
Java基础之String,StringBuilder,StringBuffer三者的区别 目录 运行速度方面 线程安全方面 小结 1. 运行速度方面 运行速度,在这方面运行速度快慢为:StringB ...
- bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string
好程序员Java学习路线分享Java基础之string 好程序员Java培训 先来讲一下字符串 字串符分类: 不可变字符串:----String.字符串本身不能发生改变,与指向字符串的引用无关. St ...
- java基础-字符串String
今天要介绍的知识点为String,也叫字符串.这是个应用的比较广泛并且充满神奇色彩的知识点.为什么说神奇呢?因为它涉及了好些个看起来高深莫测的概念.并且,这个知识点其实已经属于java中引用类型的知识 ...
- [JAVA基础类库] String类 ○ StringBuffer类 ○ StringBuilder类
引言 字符串就是一连串的字符序列,Java提供了String.StringBuffer和StringBuilder三个类来封装对字符串,并提供了系列方法来操作字符串对象. String类是不可变类的: ...
- java基础(五) String性质深入解析
引言 本文将讲解String的几个性质. 一.String的不可变性 对于初学者来说,很容易误认为String对象是可以改变的,特别是+链接时,对象似乎真的改变了.然而,String对象一经创 ...
- string 中的offset_【Java基础】String常量的长度有限制吗?
备注:JDK版本:1.8.0 最近同事问了我一个问题,String常量有长度限制吗? 为什么会问起这个问题呢,因为同事在开发中确实遇到了IDEA编译器编译过程中提示字符串常量过长的异常.异常的出现也就 ...
- java string == 比较,Java 基础 之 String 的比较
String是我们使用最频繁的一个类,在我们的日常开发中String对象的比较也是最为常见的.当然也是面试和笔试经常会被问到的的一个知识点.今天我们就来总结一下String对象的比较以及常被考的几个函 ...
最新文章
- 考csp所需算法_CSP vs RxJS:您所不知道的。
- sentinel 时间窗口_Sentinel使用令牌桶实现预热【原理源码】
- linux文件层级、目录、文件基本操作介绍
- 文件下载乱码问题分析与解决
- CANN 5.0硬核技术抢先看
- excel自定义函数添加和使用方法
- 贪心算法详解(C++)
- 如何学好C语言程序设计?
- opta球员大数据预测胜负_大数据预测4个特征,10个典型行业
- Python压缩解压–gzip
- Installing VMware Tools, please wait解决办法
- flask-uploads
- matlab实现多目标测试集ZDT、DTLZ、MOP的最优理论前沿
- 各种光纤接口类型介绍
- Unity实现功能之局域网实时语音
- TI的单芯片毫米波雷达传感器配置命令是如何传递到DSP和ARM核的?(串口程序代码走读)
- 管理经济学-使用Python和Z3求解本量利分析
- 使用python为Excel插入附件
- Maven项目Dependencies常见报错及解决方案
- 黑皮西瓜文案:黑皮西瓜水果的促销文案,黑皮西瓜水果店的文案怎么写
热门文章
- 同步异步阻塞非阻塞杂记
- 远程桌面退出全屏/不能全屏/全屏切换的技巧
- ZendStudio10.6.1如何安装最新的集成svn小工具?
- 【Android开发】消息处理类(Handler)与消息类(Message)介绍
- WP7 开发(九) WP7控件开发(六)-DeepZoom技术
- ruby 连接mysql数据库
- CodeForces - 1486C2 Guessing the Greatest (hard version)(二分+交互)
- ZOJ - 4122 Triangle City(最短路+欧拉通路+思维)
- 2019ICPC(上海) - Light bulbs(离散化+差分)
- java 异或_脚本语言系列之Java | Java中的运算符