字符串String--源码分析--JVM内存分析

String 类的对象 , 是不可变的字符串对象呢

这个不可变很重要,之后要讲的intern()也离不开它的不可变性。

https://www.cnblogs.com/xiaoxi/p/6036701.html

https://www.cnblogs.com/chenssy/p/3695271.html

这两博客源码和String基本上知识点都覆盖了

我们把 jvm 内存 逻辑上划分为 五个部分

分别是 :

栈 堆 方法区 本地方法栈 程序计数器

其中常量池在方法区里。

看几个问题:
String str=new String("abcd"); 创建了几个对象?一般说法是创建了两个,堆中一个,方法区一个。同时"abcd"放入常量池。
String str2="ab"+"cd"; 创建了几个对象? 一个。常量在编译期会优化。
String s1="ab"; String s=s1+"cd"; 创建了几个对象? 两个

这其中s3怎么都不会=="abcd"因为s3是不可变的。同时"abcd"放入常量池。

str是接收了s3在常量池中的那个地址。所以str=="abcd"

要想s3=="abcd",  s3.intern()=="abcd"  //true  直接用常量池的

大数据学习--day13(字符串String--源码分析--JVM内存分析)的更多相关文章

  1. 基于JDK1.8的String源码学习笔记

    String,可能是学习Java一上来就学习的,经常用,但是却往往只是一知半解,甚至API有时也得现查.所以还是老规矩,倒腾源码. 一.java doc 这次首先关注String的doc,因为其实作为 ...

  2. String源码学习

    String源码学习 零散的收获 数组的元素类型可以通过getComponentType来获取到 子类型的数组可以赋值给父类型的数组,.但是并不存在继承关系.数组的父类是Object. 通过声明如下代 ...

  3. memcached学习笔记——存储命令源码分析上篇

    原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...

  4. 程序兵法:Java String 源码的排序算法(一)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...

  5. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  6. 详细的String源码解析

    我们常常把String类型的字符串作为HashMap的key,为什么要这样做呢? 因为String是不可变的,一旦初始化就不再改变了,如果被修改将会是一个新对象. @Test public void ...

  7. 大数据学习day31------spark11-------1. Redis的安装和启动,2 redis客户端 3.Redis的数据类型 4. kafka(安装和常用命令)5.kafka java客户端

    1. Redis Redis是目前一个非常优秀的key-value存储系统(内存的NoSQL数据库).和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list ...

  8. java io系列14之 DataInputStream(数据输入流)的认知、源码和示例

    本章介绍DataInputStream.我们先对DataInputStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:http://www.cnblogs. ...

  9. java io系列15之 DataOutputStream(数据输出流)的认知、源码和示例

    本章介绍DataOutputStream.我们先对DataOutputStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:http://www.cnblog ...

随机推荐

  1. 为什么使用.Net Core, Asp.net Core以及部署到云端

    一,基于微软技术平台开发的应用项目,如果有以下的需求和潜在需求,建议使用.Net Core和Asp.net core技术架构: 1. 跨平台支持 2. 采用微服务架构 3. 使用Docker容器 4. ...

  2. 贪心算法和动态规划[zz]

    http://www.cnblogs.com/asuran/archive/2010/01/26/1656399.html 贪心算法 1.贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过 ...

  3. kotlin lateinit

    声明变量: private var a: String? = "" 或者:private lateinit var a: String // 使用前先初始化

  4. 申请MVP奖励时的小Tips

    大家新年好,今天MSPrecious为大家带来一些申请MVP奖励时的小Tips.   本文分为三个部分 MVP是什么 如何申请MVP 申请MVP需要注意的事项 MVP是什么? 我想,点进来看这篇文章的 ...

  5. php使用<?php include之后页首有空白

    1.今天做这一个页面的时候发现如果使用<?php include包含了一个页面,但是页首始终有一个空白行,度娘出来原来是因为使用了UTF-8格式,应该选择UFT-8无BOM格式的,原来还有这一说 ...

  6. 041队列queue(重要,多线程使用)

    内容:队列类型.方法.使用 ###############queue定义了3种信息列队模式类Queue([maxsize]):FIFO列队模式LifoQueue([maxsize]):LIFO列队模式 ...

  7. 揭秘:C++编译器的函数编译流程

    http://www.cnblogs.com/zhenjing/archive/2010/10/20/1856309.html C++中的类型查找过程相对简单,基本上就是名字查找,这里不再介绍. 对于 ...

  8. gluoncv训练faster rcnn的一点小问题

    gt数目超过上限. https://github.com/dmlc/gluon-cv/pull/335/files

  9. windows、linux互传文件

    2.常用的为上传下载 1).get 从远程服务器上下载一个文件存放到本地,如下: 先通过lcd切换到本地那个目录下,然后通过get file >> lcd d:\            # ...

  10. 【jQuery】动画小练习

    1.jQuery部分代码如下 <script type="text/javascript"> $(function(){ var page = 1; var i = 4 ...