2.1引用操纵对象

2023-11-02

1.String s;   //创建的是一个String的引用。

2.Java运行时的存储结构:

以下是摘自博文:http://www.cnblogs.com/liujunming/p/4391401.html,这里照搬过来。


1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 
3. 堆:存放所有new出来的对象。 
4. 静态域:存放静态成员(static定义的) 
5. 常量池:存放字符串常量和基本类型常量(public static final)。 
6. 非RAM存储:硬盘等永久存储空间 

这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。 
对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。 
如以下代码: 

String s1 = "china";  
String s2 = "china";  
String s3 = "china";  
String ss1 = new String("china");  
String ss2 = new String("china");  
String ss3 = new String("china");


对于通过new产生一个字符串(假设为”china”)时,会先去常量池中查找是否已经有了”china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。这也就是有道面试题:String s = new String(“xyz”);产生几个对象?一个或两个,如果常量池中原来没有”xyz”,就是两个。 
对于基础类型的变量和常量:变量和引用存储在栈中,常量存储在常量池中。 
如以下代码: 
 
int i1 = 9;  
int i2 = 9;  
nt i3 = 9;   
public static final int INT1 = 9;  
public static final int INT2 = 9;  
public static final int INT3 = 9;
对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。 
形式参数是局部变量,局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。 
成员变量存储在堆中的对象里面,由垃圾回收器负责回收。 
如以下代码: 
class BirthDate {  
   private int day;  
   private int month;  
  private int year;      
  public BirthDate(int d, int m, int y) {  
       day = d;   
     month = m;   
      year = y;  
    }  
//   省略get,set方法………  
}  
 
public class Test{  
   public static void main(String args[]){  
int date = 9;  
       Test test = new Test();        
        test.change(date);   
      BirthDate d1= new BirthDate(7,7,1970);         
  }    
 
  public void change(int i){  
       i = 1234;  
 }
对于以上这段代码,date为局部变量,i,d,m,y都是形参为局部变量,day,month,year为成员变量。下面分析一下代码执行时候的变化: 
1. main方法开始执行:int date = 9; 
date局部变量,基础类型,引用和值都存在栈中。 
2. Test test = new Test(); 
test为对象引用,存在栈中,对象(new Test())存在堆中。 
3. test.change(date); 
i为局部变量,引用和值存在栈中。当方法change执行完成后,i就会从栈中消失。 
4. BirthDate d1= new BirthDate(7,7,1970);  
d1 为对象引用,存在栈中,对象(new BirthDate())存在堆中,其中d,m,y为局部变量存储在栈中,且它们的类型为基础类型,因此它们的数据也存储在栈中。 day,month,year为成员变量,它们存储在堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。 
5.main方法执行完之后,date变量,test,d1引用将从栈中消失,new Test(),new BirthDate()将等待垃圾回收。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2.1引用操纵对象 的相关文章

  • 华为数字化转型之道 平台篇 第十一章 统一的数据底座

    平台篇 第十一章 统一的数据底座 在从传统信息化向数字化转型的过程中 企业积累了海量数据 并且还在爆发式增长 数据很多 但真正能产生价值的数据却很少 数据普遍存在分三年 不拉通的问题 缺乏统一的定义和架构 找到想要的 能用的数据越来越难 如
  • C语言结构体与共用体(1)

    结构体 有时需要将不同类型的数据组合成一个人有机的整体 以便于引用 如 一个学生有学号 姓名 性别 年龄 地址等属性 int num char name 20 char sex int age char addr 30 定义一个结构体的一般
  • php和tp5学习笔记

    之前看过php的基础教学视频 了解了一下 自己没有上手实践 现在为了项目需要 需要扎实学习一下 所以做一下笔记吧 php学习笔记 1 环境 1 用phpstudy搭建php环境 2 搭建thinkphp环境 2 知识点 2 1 URL 2
  • python判断一个集合是否为另一个集合的子集

    a 1 2 3 4 b set 1 2 b issubset a
  • FusionAD:用于自动驾驶预测和规划任务的多模态融合

    论文背景 自动驾驶 AD 任务通常分为感知 预测和规划 在传统范式中 AD中的每个学习模块分别使用自己的主干 独立地学习任务 以前 基于端到端学习的方法通常基于透视视图相机和激光雷达信息直接输出控制命令或轨迹 论文提出了基于BEV多模态的多
  • new JSONObject(true)

    构造容量为16个单位的HashMap作为JSONObject JSONObject jsonObject new JSONObject 构造容量为16个单位JSONObject 可选择器容器是否有序 LinkedHashMap true H
  • Mysql GROUP_CONCAT(expr) 介绍

    1 MYSQL版本 Welcome to the MySQL monitor Commands end with or g Your MySQL connection id is 86693 Server version 5 7 23 My
  • TCP和UDP的最完整的区别

    转自 https blog csdn net li ning article details 52117463 TCP UDPTCP与UDP基本区别 1 基于连接与无连接 2 TCP要求系统资源较多 UDP较少 3 UDP程序结构较简单 4
  • 防逆向技术简史:从代码混淆到虚拟机保护技术

    那么如何才能保护自己开发APP不被逆向破解呢 在道高一尺魔高一丈的网络安全攻防对抗中 防逆向保护技术也在不停更新演进 我在这里梳理了几个关键时期的防逆向保护技术 让大家对APP防护有一个更好理解 启蒙阶段 防逆向保护始于代码混淆技术 这个时
  • git使用——merge、rebase 区别和 idea 里的 Merge into current、Rebase current onto seleced 使用

    文章目录 1 Git 中 merge 和 rebase 的区别 2 在Intellij idea 中的使用 1 Git 中 merge 和 rebase 的区别 简介 git pull rebase和 git pull区别 是git fet
  • 【记录】mmsegmentation 训练自己的数据集

    文章目录 数据集标注工具选择 labeme 标注 精灵标注助手 photoshop标注 标准格式转换 转化为COCO格式 转化为VOC格式 json文件 mask图像 划分训练集和测试集 修改配置文件 修改data root为自己的路径 搜
  • vue:vue的计算属性以及监听属性(三)

    1 计算属性 相较于函数而言计算属性更加智能 他是基于它们的响应式依赖进行缓存的 也就是说只要相关依赖 下述例子中的area 没有发生改变 那么这个计算属性的函数不会重新执行 而是直接返回之前的值 这个缓存功能让计算属性访问更加高效 只要修
  • 解决STM32进行IAP升级跳转至APP后无法进中断问题

    最近碰到STM32在进行IAP升级时跳转至APP后无法进入中断 导致程序无法运行 正常情况下STM32进行IAP升级时 在跳转至APP程序之前 应该关闭外设 关闭中断 BootLoader中跳转程序如下 typedef void pFunc
  • Centos7 使用nginx 和 supervisord 部署python +tornado+nodejs

    一 我用到的工具是netty winscp linux 环境下安装nginx步骤 开始前 请确认gcc g 开发类库是否装好 默认已经安装 yum y install gcc gcc c 安装gcc和c 编译器 1 centOS安装依赖 y
  • vue动态判断input readonly属性

    1 如果isReadOnly等于true时 input只读 否则可以编辑
  • chatgpt赋能python:Python怎么求平均值?全面解析平均值计算方法

    Python怎么求平均值 全面解析平均值计算方法 作为一种简洁易用的计算机编程语言 Python的应用范围已经越来越广泛 在Python中 我们可以轻松地进行各种统计和计算工作 其中求平均值是最常见的计算之一 在本文中 我们将全面解析Pyt
  • JVM——8.调优工具1(jstat)

    文章目录 1 使用背景 2 jstat 的介绍及使用 2 1 jstat gc PID 介绍 2 2 其他的 jstat命令 2 3 jstat gc PID 使用 3 关注指标及计算分析 3 1 关注指标 3 2 计算分析 1 使用背景
  • linux 下家目录,根目录区别,以及普通用户到root用户的转换

    根目录 指的是最上层的目录 根目录之下有很多目录 如 home etc lib root 家目录 一般普通用户 家目录是 home 用户名 root用户 家目录是 root 如何普通用户切换到root用户 1 su 2 su root 需要
  • MySQL常见的高可用架构

    MySQL常见的高可用架构 概述 1 基于共享存储的方案SAN 优点 限制或缺点 2 基于磁盘复制的方案 MySQL DRDB架构 优点 限制或缺点 3 MySQL MHA架构 优点 缺点 4 MySQL MMM架构 优点 缺点 服务器资源

随机推荐

  • get方式长度受限,如何将较长数据传递到后台

    get方式长度有限制 所以只能用post方式 ajax url baseUrl dd sendDataToServer type post 数据发送方式 data tableJson tableJson async false succes
  • STM32——SPI通信

    文章目录 一 SPI通信 二 硬件电路 三 移位示意图 四 SPI时序基本单元 交换一个字节 模式0 用的多 交换一个字节 模式1 交换一个字节 模式2 交换一个字节 模式3 五 SPI时序 发送指令 写使能 指定地址写 指定地址读 六 W
  • LeetCode14:最长公共前缀

    题目 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car 输出 解释 输入不存在公共前缀 说明 所
  • 随笔记录之---maven版本管理(dependencyManagement,import)

    dependencyManagment 介绍前先说 没有这个东西的时候产生发问题 大家都知道maven 的父子工程目的是为了 像代码一样抽出公共部分的内容 放到父类里 减少重复的代码 在不同的模块下 确有多个相同的依赖依赖 例如 sprin
  • tensorrt之tensorrtx编译:遇到的错误提示

    一 tensorrtx 编译步骤 mkdir build cd build cmake make workspace tensorrt release include cp r NvInfer h usr local include ten
  • 程序卡在EXPORT HardFault_Handler [WEAK]问题

    现象 程序运行后卡在EXPORT HardFault Handler WEAK 位置 无法运行 如下图所示 原因 由于申请的堆栈过小导致 调整堆栈大小即可
  • CSS display: inline-block;

    display inline block 是一种 CSS 属性 用于设置元素的显示方式 当你将一个元素的 display 属性设置为 inline block 时 它将以内联块级元素的方式显示 这意味着元素会在一行上显示 并且可以设置宽度
  • 奇怪的SQL收集

    1 根据指定条件 删除重复记录只保留ID最小的一条记录 DELETE FROM gloria add count view WHERE id IN SELECT id FROM SELECT id FROM gloria add count
  • XSS game -xss学习

    网址 https xss game appspot com level1 Level 1 Hello world of XSS payload 漏洞产生处 message Sorry no results were found for b
  • 工作记录-远程debug调试步骤

    在工作中 使用远程 debug进行调试 进行一下全方位的记录 背景前提 项目目录下已经编写好并存在 start sh脚本 1 先通过 Xshell进入到项目 的bin 路径下 cd usr local XXXX core XXXtask b
  • Matlab在数据科学中的灭亡

    意见 Opinion My personal interest in Data Science spans back to 2011 I was learning more about Economies and wanted to exp
  • 计算机领域各大顶会顶刊集合梳理

    兄弟萌冲啊冲啊 冲冲冲 为了idea 为了占位置 为了发文章 一 前言 每一个领域内 都有很多优秀的 认可度高的会议或者期刊 其他领域不太了解 但一般用SCI一区 二区等来区分论文质量 对于计算机领域而言 一般的分类方式是CCF评级 从A到
  • steam进社区显示服务器错误,Steam错误代码-118怎么办 社区打不开解决方法

    steam是不少玩家在玩游戏时常常会使用到的游戏商城 但是近日很多玩家出现在启动steam的时候出现错误代码 118 社区打不开连接不上商店 那么遇到这种情况应该怎么呢 不用着急 今天UU就为大家带来了出现错误代码 118的解决方法 希望可
  • 数造更高容量 存储“大”有可为——带你全面了解磁记录技术

    磁记录是利用磁的性质进行信息的记录的方式 在存储和使用的时候通过特殊的方法进行信息的输入和读出 从而达到存储信息和读出信息的目的 当今世界正处于数据大爆炸的时期 据IDC预测 截至2025年 全球数据增量将从2020年的64ZB增加到近18
  • 什么叫期货通俗一点

    什么叫期货通俗一点 2 举个例子 假设现在苹果5块一个 你的期货合约是做多 一个月的交割期 那么在这一个月的期间内 苹果涨到了10块 你可以平仓获利出场拿到资金 也可以交割实物 一般很少有交割实物 这就是期货价格对于实物价格的先行指导意义
  • 2017年6月,两个手游换皮项目,第六,七

    在手游公司暂时全职 换皮
  • c++学习之list容器排序

    一 排序案例 案例描述 将Person自定义数据类型进行排序 Person中属性有姓名 年龄 身高 排序规则 按照年龄进行排序 如果年龄相同按照身高及进行降序 二 代码示例 include
  • python for i in range(len())_python - Python:for循环 - for i in range(0,len(list)vs i for list in lis...

    如果您打开口译员并执行以下操作 help range 你会得到这个 Help on built in function range in module builtin range range stop gt list of integers
  • windows tail.exe 和中文乱码

    下载地址 https github com oneslideicywater easy interview releases download v1 0 0 tail zip 如何用 解压放到windows 任意PATH路径下 解决中文乱码
  • 2.1引用操纵对象

    1 String s 创建的是一个String的引用 2 Java运行时的存储结构 以下是摘自博文 http www cnblogs com liujunming p 4391401 html 这里照搬过来 1 寄存器 最快的存储区 由编译