基础类型存放在栈上,引用类型存放在堆上,请问是为什么? 字符串是存放在栈上么?

news2025/2/28 5:12:47

基础类型存放在栈上,引用类型存放在堆上,请问是为什么?

记住一句话:能量是守衡的,无非是时间换空间,空间换时间的问题

堆比栈大,栈比堆的运算速度快,对象是一个复杂的结构,并且可以自由扩展,如:数组可以无限扩充,对象可以自由添加属性。将他们放在堆中是为了不影响栈的效率。而是通过引用的方式查找到堆中的实际对象再进行操作。
相对于简单数据类型而言,简单数据类型就比较稳定,并且它只占据很小的内存。

不将简单数据类型放在堆是因为通过引用到堆中查找实际对象是要花费时间的,而这个综合成本远大于直接从栈中取得实际值的成本。
所以简单数据类型的值直接存放在栈中。

字符串是存放在栈上么?为什么

不是
因为如果一个字符串很大,在栈内存不下,只能存在字符串常量池中,被栈或堆上的变量引用。

如果变量的值是字符串字面量,则在栈上的变量直接引用字符串常量池中的字符串;如果是字符串是 new String 创建的,则会在堆上创建 String 对象,指向字符串常量池中的字符串,栈上变量指向堆中的 String 对象。

一旦它被创建,它将不会被更改。但是,许多这样的常量将被创建以供业务使用。字符串变量实际上是指常量的内存地址。当字符串的值更改时,内存地址将自动修改。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果手机和电脑怎么录屏?详细教程来了!

​相信小伙伴身边有不少人使用的是苹果手机和电脑。安卓手机和windows电脑怎么录屏不少人都已经知道了,那么苹果手机和电脑怎么录屏 呢?现在,小编就来详细的教教大家如何录屏,快拿出小本本记下来哦! 一.苹…

C++11标准模板(STL)- 算法(std::partition_copy)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 复制一个范围&#xff0c;…

扒去 Spring 事件监听机制的外衣,竟是观察者模式

Spring 中提供了一套默认的事件监听机制&#xff0c;在容器初始化时便使用了这套机制。同时&#xff0c;Spring 也提供了事件监听机制的接口扩展能力&#xff0c;开发者基于此可快速实现自定义的事件监听功能。Spring 的事件监听机制是在 JDK 事件监听的基础上进行的扩展&#…

基于结构应力方法的焊接结构疲劳评估及实例分析(上篇)

作者 | 裴宪军博士 &#xff0c;仿真秀专栏作者 一、写在文前 焊接技术作为现代制造业中的支柱技术之一&#xff0c;由于其整体性强、轻量化、经济性好等优点&#xff0c;焊接结构被广泛应用于轨道交通、航空航天&#xff0c;船舶、重型装备等领域&#xff0c;安全承载问题也…

八大排序总结篇

一、前言 到这里&#xff0c;数据结构的八大排序就算是全部写完了。这一期总结篇我们来测试一下八大排序的效率&#xff0c;印证一下八大排序的时间复杂度&#xff0c;以及深度剖析一下八大排序的稳定性问题。 二、八大排序 1、直接插入排序 http://t.csdn.cn/CdFFu 2、希尔排…

css:为什么我设置宽高百分比不生效

很多新手朋友写 css 的时候&#xff0c;有时发现设置宽高百分比有用&#xff0c;有时候又没用&#xff0c;到底怎么回事呢&#xff1f; 核心原则 设置百分比的时候&#xff0c;需要父元素有固定的高度&#xff0c;注意&#xff0c;这里说的只是需要父元素有固定的高度&#x…

机器学习极简入门笔记-4-有监督学习进阶-HMM

目录 15.1 基本概念 概率模型 生成模型与判别模型 概率图模型 马尔可夫链&#xff0c;马尔可夫随机场和 CRF 15.2 数学中的HMM HMM的两个基本假设 15.3 HMM的三个基本问题 概率计算问题 预测问题 学习问题 15.4 HMM3个基本问题的计算 概率计算问题 预测问题 学习…

【Spring源码】18. 属性填充:populateBean()详解

进入populateBean() 对bean的属性进行填充&#xff0c;将各个属性值注入&#xff08;存在其他bean的属性&#xff0c;则会递归初始化依赖的bean&#xff09; ​一开始会先对传入的参数进行判断&#xff08;如下图红框框中的逻辑&#xff09; 如果传入的BeanWrapper和RootBeanD…

如何免费将pdf转word?看完这篇你就会了

pdf是我们学习工作中&#xff0c;经常会接触到的一种文件格式。通常我们都会以这种pdf格式来传输文件&#xff0c;因为它可以确保在不同的设备上打开以及不会出现文件内容格式错乱的情况。可是当我们需要对它的内容进行修改时&#xff0c;就有些困难&#xff0c;需要先将pdf转换…

软件测试之缺陷书写规范

1、标题&#xff1a;应保持简短、准确、提供缺陷的本质信息。 -尽量以缺陷发生的原因与结果的方式相结合的放式书写; -尽量避免使用模糊不清的词语&#xff0c;例如&#xff1a;“功能中断”、“功能不正确”、“行为不起作用”等&#xff0c;应该使用具体文字说明缺陷的症状; …

flink学习之sql-client之踩坑记录

flink/bin目录下会看到这个脚本&#xff0c;最开始以为是和spark-shell差不多的。结果自行摸索无果&#xff0c;网上查的文章也写的很垃圾&#xff0c;自己查官网看下吧。 SQL 客户端 | Apache Flink 直接./sql-client.sh SELECT Hello World; 报错 org.apache.flink.runtim…

NFT 泡沫是否已经被挤破

Sep. 2022, Dan LeBaron Data Source: Footprint Analytics - NFT Volume in 2021 Vs. 2022 虽然NFT已经存在了几年&#xff0c;但在无聊猿 (BAYC)等大型项目启动的推动下&#xff0c;该技术在2021年爆发式地流行。 似乎是突然间&#xff0c;名人、运动员和主要的艺术收藏家都…

深度剖析 Python 日志重复打印问题

python 日志处理流程 使用 python 做日志输出时&#xff0c;首先我们需要一个创建一个 Logger 对象&#xff1a;import logging; logger logging.getLogger() 然后就可以用 logger.info/debug/error(msg) 来输出日志 如果只是单纯地打印日志&#xff0c;这样做和 print 没有任…

高压功率放大器的作用(功率放大器的应用领域是什么)

高压功率放大器的适用范围和应用领域是很多电子工程师所关心的&#xff0c;那么高压功率放大器的作用以及有哪些使用场景呢&#xff0c;下面就让安泰电子来为大家介绍。 高压功率放大器是电子实验室会频繁使用的测试仪器&#xff0c;是在实验中能够帮助输出信号达到最大输出功率…

【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性-续

大家好&#xff0c;我是黄啊码&#xff0c;上节课的东西学完了吧&#xff1f;脑瓜子嗡嗡的吧&#xff1f;来&#xff0c;继续&#xff0c;让脑瓜子一次性嗡个够&#xff0c;压力大&#xff0c;才有动力。 目录 PHP CSPRNG PHP 7 use 语句 PHP 7 错误处理 PHP intdiv() 函…

实验28:步进电机实验

OK,我是走程序猿的道路 我的blog侧重点在讲解代码 本实验结果: 步进电机正转 步进电机反转 步进电机工作原理我就不去讨论了 重点在于代码分析和讲解 01 硬件电路设计 硬件电路总图 接口: 步进电机驱动器板和Arduino Uno板之间的接线: 步进电机驱动器 Arduino Uno…

opencv之 drawContours() 函数说明应用

drawContours 之前使用mask图还进行了连通域有无status分析&#xff0c;然后才进行的绘制。 今天发现直接使用mask图进行绘制&#xff0c;然后通过设置drawContours的参数可以进行不同层次上缺陷的绘制&#xff0c;然后通过这个事情也说明&#xff0c;有问题可以直接找opencv官…

“综合”web项目编写------手把手0基础教学(一)

我们平常看到的项目代码一般都是分段单独的功能&#xff0c;但如何将功能汇总成一个完整的项目呢&#xff0c;下面我将利用IDEA来介绍一个基础的综合web项目 目录 一.创建项目 二.为项目建包 1.了解构建项目的思路 &#xff08;1&#xff09;构建模型&#xff08;模型包括数…

集线器与交换机、虚拟局域网(3.3)

集线器与交换机 传输门&#xff1a;b站湖科大教书匠 集线器 使用集线器的以太网或者局域网其实本质还是一个总线网 工作方式 集线器只工作在物理层&#xff0c;每个接口仅仅用来转发比特&#xff0c;不进行碰撞检测&#xff08;不使用CSMA/CD协议&#xff09;&#xff0c;由…

如何自定义代码生成器(上)

1 概述 1.1 介绍 ​ 在项目开发过程中&#xff0c;有很多业务模块的代码是具有一定规律性的&#xff0c;例如controller控制器、service接口、service实现类、mapper接口、model实体类等等&#xff0c;这部分代码可以使用代码生成器生成&#xff0c;我们就可以将更多的时间放…