String s =new String()分析堆与栈
2019独角兽企业重金招聘Python工程师标准>>>
先定义S1. String str1 = "abc"; System.out.println(str1 == "abc"); 步骤:
1) 栈中开辟一块空间存放引用str1,
2) String池中开辟一块空间,存放String常量"abc",
3) 引用str1指向池中String常量"abc",
4) str1所指代的地址即常量"abc"所在地址,输出为true 2. String str2 = new String("abc"); System.out.println(str2 == "abc"); 步骤:
1) 栈中开辟一块空间存放引用str2,
2) 堆中开辟一块空间存放一个新建的String对象"abc",
3) 引用str2指向堆中的新建的String对象"abc",
4) str2所指代的对象地址为堆中地址,而常量"abc"地址在池中,输出为false 3. String str3 = new String("abc"); System.out.println(str3 == str2); 步骤:
1) 栈中开辟一块空间存放引用str3,
2) 堆中开辟一块新空间存放另外一个(不同于str2所指)新建的String对象,
3) 引用str3指向另外新建的那个String对象
4) str3和str2指向堆中不同的String对象,地址也不相同,输出为false 4. String str4 = "a" + "b"; System.out.println(str4 == "ab"); 步骤:
1) 栈中开辟一块空间存放引用str4,
2) 根据编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"ab",
3) 引用str4指向池中常量"ab",
4) str4所指即池中常量"ab",输出为true 5. final String s = "a"; String str5 = s + "b"; System.out.println(str5 == "ab"); 步骤:
同4 6. String s1 = "a"; String s2 = "b"; String str6 = s1 + s2; System.out.println(str6 == "ab"); 步骤:
1) 栈中开辟一块中间存放引用s1,s1指向池中String常量"a",
2) 栈中开辟一块中间存放引用s2,s2指向池中String常量"b",
3) 栈中开辟一块中间存放引用str5,
4) s1 + s2通过StringBuilder的最后一步toString()方法还原一个新的String对象"ab",因此堆中开辟一块空间存放此对象,
5) 引用str6指向堆中(s1 + s2)所还原的新String对象,
6) str6指向的对象在堆中,而常量"ab"在池中,输出为false 7. String str7 = "abc".substring(0, 2); 步骤:
1) 栈中开辟一块空间存放引用str7,
2) substring()方法还原一个新的String对象"ab"(不同于str6所指),堆中开辟一块空间存放此对象,
3) 引用str7指向堆中的新String对象, 8. String str8 = "abc".toUpperCase(); 步骤:
1) 栈中开辟一块空间存放引用str6,
2) toUpperCase()方法还原一个新的String对象"ABC",池中并未开辟新的空间存放String常量"ABC",
3) 引用str8指向堆中的新String对象
public void hello(){String hello="hello";String hel="hel";String lo="lo";System.out.println(hello=="hel"+"lo");System.out.println("hello"=="hel"+"lo");System.out.println("hello"=="hel"+lo);System.out.println("hello"==hel+lo);System.out.println(hello==hel+lo);}true
true
false
false
false@Testpublic void String(){String abc="abc";System.out.println(abc=="abc");//trueString a="";String b="";System.out.println(a==b);//true}
引用:http://zhidao.baidu.com/link?url=L1YfaYRaQ_dkRRn8FFRPUkiTI3Z0-x-HzttZKfeU7d_5AZJ8ohyzvu_QcGnSB5Jmy-fLzcMQTdnYQIfmiWIWOa
转载于:https://my.oschina.net/qingpei88800/blog/350124
String s =new String()分析堆与栈相关推荐
- java中String s=abc及String s=new String(abc)详解
java中String s="abc"及String s=new String("abc")详解 1. 栈(stack)与堆(heap)都是Java用来在R ...
- java静态方法 问题_Java中堆、栈,静态方法和非静态方法的速度问题
一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...
- java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题
一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...
- c++ string 堆还是栈_5个刁钻的String面试题解析
1.判定定义为String类型的st1和st2是否相等,为什么? public class Demo2_String { public static void main(String[] args) ...
- c++ string 堆还是栈_5 个刁钻的 String 面试题!你都遇到过哪些?
前言 这篇来看看关于 Java String 类的 5 道面试题,这五道题,我自己在面试过程中亲身经历过几道题目,本篇就带你了解这些题的答案为什么是这样. 1.判定定义为String类型的st1和st ...
- java 常量池 和 堆 的关系_Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)...
博客分类: Java综合 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有 ...
- Linux如何在栈上分配内存,Java堆与栈内存分配及String小记
栈内存 堆内存 基础类型,对象引用(堆内存地址) 由new创建的对象和数组, 存取速度快 相对于栈内存较慢 数据大小声明周期必须确定 分配的内存由Java虚拟机自动垃圾回收器管理.动态分配内存大小 共 ...
- java string 栈_Java堆和栈的区别(String类)
堆与栈 Java的堆是一个运行时数据区,对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放.堆是由垃圾回 ...
- Java堆、栈、内存分析
在 JAVA 中,有六个不同的地方可以存储数据: 1. 寄存器( register ).这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根 ...
- java中堆与栈的区别_java中堆和栈的区别分析
堆和栈是Java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...
最新文章
- php5.5.25升级到php5.6.30,加载yaf.so报错解决方法!
- 文件路径,文件名,扩展名 常用操作
- Hadoop Distributed File System 简介
- java.util.Date和java.sql.Date之间的相互转换
- c语言求最多啤酒数,C语言,算法、动态规划:有一个箱子的容量为v(正整数,0=v=20000),同时有n个物品(0n=30),...
- Android 13 第一个开发者版本来了,网友直呼:Android 12 还没玩透!
- mysql explain insert_简述Mysql Explain 命令
- SpringCloud 入门教程(一): 服务注册
- 一篇文章,可以同时拥有4份收益,你知道吗?
- day21-2 类的派生
- 聊聊索引失效的10种场景,巨坑
- 打印机服务器启用后自动关闭,打印机print spooler服务启动后总是自动停止的解决方法(没测试)...
- Nginx源码目录介绍
- 如何用AE做出动画效果杭州UI设计分享方法
- 标准差σ未知_标准差σ的4种计算公式
- windows webrtc 如何实现桌面共享
- can't find compiler executable in your configured search path's for GUN GCC Complier的应对办法
- XILINX DMA/Bridge Subsystem for PCI Express (XDMA)笔记1(基于VU250 board)
- 会声会影2023中文旗舰版新增功能讲解及下载更新教程
- Cloud Foundry samples学习笔记9:模拟股票交易系统stocks
热门文章
- 使用easy_install安装BeautifulSoup——Python
- 代码分享:JS判断登陆端是PC还是手机
- [原创]Tsys 2.0 beta 官方版无法使用自定义SQ
- 银行电子支付接口概述
- servlet,listener,filter,interceptor的关系
- 【洛谷P1800】software_NOI导刊2010提高(06)
- C++ 编写 CorelDRAW CPG 插件例子(1)—WelcomeScreen
- 空巢青年,“空巢”是选择还是无奈? | 数据告诉你
- 对有序特征进行离散化(继承Spark的机器学习Estimator类)
- 修改上传文件大小限制(LNMP/wamp环境)