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()分析堆与栈相关推荐

  1. java中String s=abc及String s=new String(abc)详解

    java中String s="abc"及String s=new String("abc")详解 1.   栈(stack)与堆(heap)都是Java用来在R ...

  2. java静态方法 问题_Java中堆、栈,静态方法和非静态方法的速度问题

    一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...

  3. java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题

    一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...

  4. c++ string 堆还是栈_5个刁钻的String面试题解析

    1.判定定义为String类型的st1和st2是否相等,为什么? public class Demo2_String { public static void main(String[] args) ...

  5. c++ string 堆还是栈_5 个刁钻的 String 面试题!你都遇到过哪些?

    前言 这篇来看看关于 Java String 类的 5 道面试题,这五道题,我自己在面试过程中亲身经历过几道题目,本篇就带你了解这些题的答案为什么是这样. 1.判定定义为String类型的st1和st ...

  6. java 常量池 和 堆 的关系_Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)...

    博客分类: Java综合 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有 ...

  7. Linux如何在栈上分配内存,Java堆与栈内存分配及String小记

    栈内存 堆内存 基础类型,对象引用(堆内存地址) 由new创建的对象和数组, 存取速度快 相对于栈内存较慢 数据大小声明周期必须确定 分配的内存由Java虚拟机自动垃圾回收器管理.动态分配内存大小 共 ...

  8. java string 栈_Java堆和栈的区别(String类)

    堆与栈 Java的堆是一个运行时数据区,对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放.堆是由垃圾回 ...

  9. Java堆、栈、内存分析

    在 JAVA 中,有六个不同的地方可以存储数据: 1. 寄存器( register ).这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根 ...

  10. java中堆与栈的区别_java中堆和栈的区别分析

    堆和栈是Java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

最新文章

  1. php5.5.25升级到php5.6.30,加载yaf.so报错解决方法!
  2. 文件路径,文件名,扩展名 常用操作
  3. Hadoop Distributed File System 简介
  4. java.util.Date和java.sql.Date之间的相互转换
  5. c语言求最多啤酒数,C语言,算法、动态规划:有一个箱子的容量为v(正整数,0=v=20000),同时有n个物品(0n=30),...
  6. Android 13 第一个开发者版本来了,网友直呼:Android 12 还没玩透!
  7. mysql explain insert_简述Mysql Explain 命令
  8. SpringCloud 入门教程(一): 服务注册
  9. 一篇文章,可以同时拥有4份收益,你知道吗?
  10. day21-2 类的派生
  11. 聊聊索引失效的10种场景,巨坑
  12. 打印机服务器启用后自动关闭,打印机print spooler服务启动后总是自动停止的解决方法(没测试)...
  13. Nginx源码目录介绍
  14. 如何用AE做出动画效果杭州UI设计分享方法
  15. 标准差σ未知_标准差σ的4种计算公式
  16. windows webrtc 如何实现桌面共享
  17. can't find compiler executable in your configured search path's for GUN GCC Complier的应对办法
  18. XILINX DMA/Bridge Subsystem for PCI Express (XDMA)笔记1(基于VU250 board)
  19. 会声会影2023中文旗舰版新增功能讲解及下载更新教程
  20. Cloud Foundry samples学习笔记9:模拟股票交易系统stocks

热门文章

  1. 使用easy_install安装BeautifulSoup——Python
  2. 代码分享:JS判断登陆端是PC还是手机
  3. [原创]Tsys 2.0 beta 官方版无法使用自定义SQ
  4. 银行电子支付接口概述
  5. servlet,listener,filter,interceptor的关系
  6. 【洛谷P1800】software_NOI导刊2010提高(06)
  7. C++ 编写 CorelDRAW CPG 插件例子(1)—WelcomeScreen
  8. 空巢青年,“空巢”是选择还是无奈? | 数据告诉你
  9. 对有序特征进行离散化(继承Spark的机器学习Estimator类)
  10. 修改上传文件大小限制(LNMP/wamp环境)