程序内存分配 栈和堆
1.变量:基本数据类型在栈内分配空间:整形 int … 浮点型 double… 布尔类型 boolean 字符型 char
int a = 1;
2.引用类型在堆内分配空间,同时在栈内分配引用的地址空间 都是对象,也就是引用类型,包括数组。
String底层是数组实现的,创建了新数组,所以string是引用类型。
String hello = "hello";
Object obj=new Object();
当执行到new这个关键字,会在堆内存分配内存空间,并把该内存空间的地址赋值给栈内的一个空间。
引用类型的属性全部在堆内分配空间。
3.方法调用会将参数复制一份,并且与返回程序指针一起进栈,方法结束时将所有相关栈全部弹出。
5.当双等于号两边是基本数据类型时,比较的是双等于号两边的两个值是否相等,当双等于号两边是引用类型时比较的是两个内存地址,也可以看成是看这两个引用是否指向堆内存里的同一块地址.
int a=1;
int b=1;
System.out.println(a==b);//输出为trueView view1=new View();
View view=new View();
System.out.println(view==view1);//为false 因为他们在堆中分配的地址不同
6.eqauls方法在比较String的时候,=比较的是值,而不是地址,因为String重写了Object的eqauls方法,而Object的equals方法,底层实现是”==“,比较引用类型时比较的是堆地址。
String c="1";
String d="1";
System.out.println(c==d);//输出为true
String e=c;
System.out.println(c==e);//输出为true
7.形如:
int[] a=new int[N];
...
a[i]=123;
...
int[] b=a;
...
b[i]=545;
这样的话 a[i]的值也会变成545
这种情况叫做起别名
数组名表示的是整个数组-----如果我们将一个数组变量赋予另一个变量,那么两个变量将会指向同一个数组
改变b[i] 也就是在堆中的数组值被改变了
如果你想复制一份数组,那么你应该创建一个新的数组来存放这些数据;
程序内存分配 栈和堆相关推荐
- C++程序内存分配方式(堆与栈)
一.内存布局 1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等,其操作方法类似数据结构中的栈. 2.堆区(heap):一般由程序员分配释放,与数据结构中的堆毫无关系,分配方 ...
- 关于内存中栈和堆的区别[转]
1.内存分配方面: 堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式是类似于链表.可能用到的关键字如下:new.malloc.delet ...
- [ZZ]关于内存中栈和堆的区别
1.内存分配方面: 堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式是类似于链表.可能用到的关键字如下:new.malloc.delet ...
- Java内存分析—栈,堆,方法区
Java内存分析-栈,堆,方法区 一.栈: 1).特点是:自动分配,连续空间,先进后出原则. 2).基本数据类型(一共有八种,char,byte,short,int,long,float,double ...
- 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 内存分配方式以及堆和栈的区别
转载:https://blog.csdn.net/shanchangyi/article/details/51854795 对于一个程序要运行,涉及到的内存分配是一个首要问题,这里简单说一下一个简单的 ...
- C/C++程序内存分配详解
一.常见的几个区 1.栈区(stack)程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. 2.堆区(heap)在内存开辟另一块 ...
- Java内存之栈与堆
昨天中午,发了一篇equals和==区别的博文,晚上再看时有几位大牛指出了其中的一些错误,很感谢他们的留言,一句简简单单的留言给了我对这些错误知识点改正的机会.或许这就是从事互联网行业所提倡的互帮互助 ...
- 搞懂深浅拷贝JavaScript内存之栈和堆
对于前端来说,平时开发业务代码的时候根本不会关心JavaScript的内存问题,因为根本用不到,也因此对于内存分配没有一点概念.只有理解了内存分配,对于深拷贝和浅拷贝才能真正理解.当然,理解内存分配对 ...
最新文章
- Xamarin iOS教程之编辑界面编写代码
- 【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改
- c 串转string_string::c_str()、string::c_data()及string与char *的正确转换
- html表单验证js代码,JavaScript表单验证实现代码
- php pdo 封装类,php pdo封装类代码(支持事务)
- jQuery基础(未完待续)
- cpu system linux,LINUX system BOOT
- 写了人生中第一个完整模块的用例
- 运维部门工作总结_运维部工作总结
- php 回调通知 连连支付_php app支付宝回调(异步通知)详解
- 塘沽十三中2021年高考成绩查询,2020天津高考成绩查询
- [转]ExtJs中可用的xtype
- 【从C到C++学习笔记】类声明/公有私有保护成员/数据抽象和封装
- 回顾 | Apache Flink 1.13 新版本 x 互娱实践分享 Meetup · 北京站精彩回顾 (附 PPT 下载)...
- Altium Designer 18中查找元器件的四种方法
- 由于系统限制了文件目录的读/写权限,程序将会退出,你可以重新安装百度网盘到有权限的目录或以管理员身份运行百度网盘。
- JavaScript设计模式 - 适配器模式
- chm格式电子书另类反编译法:使用压缩软件7Z简单实现CHM电子书反编译 | 志文工作室
- QT学习教程(全面)
- Apple有史以来屏幕最大的手机iPhone 12最新超详细揭秘