重点:

1、当比较包装类里面的数值是否相等时,用equals()方法;

2、当测试两个包装类的引用是否指向同一个对象时,用==。

可以这样理解吗?

2.1、栈中的两个包装类的引用变量引用栈中的一个对象

(String s1=“abc”;

String s2=“abc”;

)

2.2、栈中的两个包装类引用变量引用堆中的一个对象

(String s1=new String("abc");

String s2=s1;

)

栈内存

堆内存

基础类型,对象引用(堆内存地址)

由new创建的对象和数组,

存取速度快

相对于栈内存较慢

数据大小声明周期必须确定

分配的内存由java虚拟机自动垃圾回收器管理。动态分配内存大小

共享特性

栈中如果有字符串,则直接引用

如果没有,开辟新的空间存入值

每new一次在堆内存中生成一个新的对象。

创建之后值可以改变

String类声明后则不可改变

一、栈内存

基础类型int, short, long, byte, float, double, boolean, char和对象引用

栈的共享特性

String str1 = "abc";

String str2 = "abc";

System.out.println(str1==str2); //true

1、编译器先处理String str1 = "abc";它会在栈中创建一个变量为str1的引用,然后查找栈中是否有abc这个值,如果没找到,就将abc存放进来,然后将str1指向abc。

2、   接着处理String str2 = "abc";在创建完b的引用变量后,因为在栈中已经有abc这个值,便将str2直接指向abc。这样,就出现了str1与str2同时均指向abc的情况。

二、堆内存

new、newarray、anewarray和multianewarray等指令建立

要 注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的 对象。只有通过new()方法才能保证每次都创建一个新的对象。 由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。

三、  ==   内存地址比对

String str1 = "abc";

String str2 = "abc";

System.out.println(str1==str2); //true    str1和str2同时指向 栈内存 中同一个内存空间

String str3 = "abc";

String str4 = new String("abc") ;

System.out.println(str3 == str4);    //flase str3值在栈内存中,str4值在堆内存中

String hello = "hello" ;

String hel = "hel" ;

String lo = "lo" ;

System.out.println(hello == "hel" + "lo") ; //true

//两个常量相加,先检测栈内存中是否有hello如有有,指向已有的栈中的hello空间

System.out.println(hello == "hel" + lo) ;   //flase

System.out.println(hello == hel + lo) ;     //flase

//lo是在常量池中,不检查栈内存,在堆中产生一个新的hello

四、  equals  值进行比对

public boolean equals(Object anObject)

将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。

String str5 = "abc";

String str6 = new String("abc") ;

System.out.println(str5.equals(str6));    //true   str5的值str6的值比对

五、  intern    栈中值的内存地址

Public String intern()

当调用 intern 方法时

1、如果池已经包含一个等于此 String 对象的字符串(用equals(Object) 方法确定),则返回池中的字符串。

2、将此 String 对象添加到池中,并返回此 String 对象的引用。

String s7 = new String("abc") ;

String s8 = "abc" ;

System.out.println(s7 == s7.intern()) ;//flase;

System.out.println(s8 == s7.intern() );//true

1.检查栈内存中有没有abc对象如果有

2.将s7指向pool中abc

java string 空间_java堆与栈 java String分配内存空间(详解)相关推荐

  1. c语言分配多一个字符空间,关于C语言动态给字符串分配内存空间问题

    在动态分配的空间中如何输入字符串,关于C语言动态给字符串分配内存空间的问题相信很多朋友都不太了解,下面维维带来相关解答,赶紧看看吧. 用malloc来分配内存空间. 即输入几个字节的字符 系统就自动帮 ...

  2. java 值对象_java 中设计模式(值对象)的实例详解

    java 中设计模式(值对象)的实例详解 应用场景:在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互?这个时候就需要用到我们的值对象设 ...

  3. java判断或_Java判断用户名和密码是否符合要求过程详解

    这篇文章主要介绍了Java判断用户名和密码过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设在某仓库管理系统的登录界面中需要输入用户名和密 ...

  4. java metadata 使用_java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMet ...

  5. java手机模式_Java使用建造者模式实现办理手机套餐功能详解

    本文实例讲述了Java使用建造者模式实现办理手机套餐功能.分享给大家供大家参考,具体如下: 一.模式定义 建造者简单理解就是造东西,只不过建造者模式建造的不是一个简单的东西,是一个比较复杂的东西. 二 ...

  6. java正则 环视_Java正则环视和反向引用功能与用法详解

    本文实例讲述了Java正则环视和反向引用功能与用法.分享给大家供大家参考,具体如下: 环视 1.环视概念 环视,又称为零宽断言,简称断言. 环视强调位置(前面或后面),必须匹配环视表达式,才能匹配成功 ...

  7. java读取日志_Java实时监控日志文件并输出的方法详解

    前言 最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据 ...

  8. java steam说明_Java 8 Steam API map和flatMap方法使用详解

    一对多的提取内容用flatmap,一对一用map java 8 stream api 中有两个方法map和flatMap非常实用,应用场景也非常广泛,能极大提升编程效率.下面我们详细介绍一下这两个方法 ...

  9. java手势识别技术_Java乔晓松-android中的手势识别的详解

    对于android中的手势识别,效果如下图所示: 模拟器中有个可以添加手势的工具Gestures Builder,可以添加手势如下图所示: 当添加手势成功后,会在Sdcard上产生保存的手势的文件ge ...

  10. java同步关键字_Java中synchronized关键字修饰方法同步的用法详解

    Java的最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问. 每一个用synchronized关键字声明的方法都是临界区.在Java中,同一个对象的临界区,在同一时间只有 ...

最新文章

  1. MATLAB信号处理工具箱函数列表分类
  2. linux安装x11鼠标主题
  3. Linux压缩打包命令
  4. android 记录路线轨迹_基于百度地图SDK记录运动轨迹
  5. java 中的单引号报错_shell中的单引号,双引号,反引号
  6. 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列
  7. 浅谈分布式计算的开发与实现(二)
  8. ubuntu 1404部署tomcat7
  9. 强化学习平台安装 Mujoco、mujoco-py、gym、baseline
  10. 无线测温系统应用 对变电所进行实时的在线监测 生产高效安全
  11. 双目摄像头三种标定方式标定结果对比
  12. 【转载】SQL注入进阶
  13. 解决笔记本光驱位硬盘休眠卡顿问题
  14. 分支和循环语句---循环语句
  15. 电大计算机专业英语形成性考试,电大资源网《管理英语1》形成性考核册作业题目和答案2018年...
  16. A Simple but Effective Pluggable Entity Lookup Table for Pre-trained Language Models翻译
  17. 关于CSDN获取博客内容接口的x-ca-signature签名算法研究
  18. 使C#语言编程更加高效的伎俩
  19. 【木棍问题——回溯与分支限界算法(使用C语言解决)】
  20. 网络安全实验室--上传关

热门文章

  1. visual studio怎么用_自从用了敏捷,天天在开会?4大Scrum会议如何才能有意义?...
  2. 使用二分查询数组中的某一个元素,简单示例,详细注解
  3. python中unique函数_Pandas Series.unique()用法介绍
  4. r语言 rgl 强制过程中_R语言中的方差分析方法汇总
  5. leetcode数组汇总_LeetCode刷题实战74:搜索二维矩阵
  6. linux zip压缩比1000,linux下压缩工具总结与使用(参考私房菜)
  7. java welcome-file_通过JSF项目中的welcome-file设置默认主页
  8. fluentmigrator连接mysql_如何利用FluentMigrator实现数据库迁移
  9. 24、List三个子类的特点
  10. 208-实现 Trie (前缀树)