Java中声明,定义,分配内存,初始化,赋值,是啥?

news2024/11/24 16:05:47

一. 声明,定义和分配内存

在Java中,声明和定义是同一个意思,不做区分。下面这些都是声明(定义)一个变量。

栈:存放局部变量(包括基本数据类型的变量和对象的引用)

堆:存放new的对象

声明一个变量,就在栈上开辟了一块空间,分配内存了。如果只声明,没初始化。那么栈上分配的内存中什么都没存。但是这种情况不会存在,因为Java规定,局部变量在使用前必须要初始化。

对于基本数据类型来说,之后对变量初始化和赋值,栈上分配的内存存的就是这个值。

对于引用数据类型来说,使用new创建对象后,才会在堆上分配内存来存储这个对象。栈上分配的内存中存储的是对象的地址。堆上分配的内存存的是对象(对象没初始化,会有默认值)。如果没有new对象,而是赋值null,那么就不会在堆上分配内存,栈上分配的内存中存的是null。

分配内存数组例子:

int[] array;声明了一个数组array,在栈上分配了内存,内存中什么都没有没有在堆上分配内存

int[] array = new int[5];声明了一个数组array,在栈上分配了内存。new了一个对象,给对象在堆上分配内存了,但对象没初始化。栈上分配的内存中存的是对象的地址堆上分配的内存中存的是默认值0。

int[] array = new int[]{1,2,3,4,5};声明了一个数组array,在栈上分配了内存。new了一个对象,给对象在堆上分配了内存,并且对象初始化了。栈上分配的内存中存的是对象的地址堆上分配的内存中存的是{1,2,3,4,5};

int[] array = new int[0]; 和 int[] array = {};声明了一个数组array,在栈上分配了内存。new了一个空对象,在堆上分配了内存。栈上分配的内存中存的是对象的地址堆上分配的内存中什么都没有。

int[] array = null;声明了一个数组array,在栈上分配了内存。array = null,没有new对象,所以没有在堆上分配内存。栈上分配的内存中存的就是null

int[] array = new int[0]; 和 int[] array = {}; —— 数组长度为0,是空数组

!!!对于引用数据类型来说,我们一般说的有没有分配内存指的是堆内存,有没有初始化也指的是对象

只要new对象了,就会在堆上分配内存。空数组(数组长度为0)也会分配。因为虽然空数组不包含任何元素,但它仍然需要一定的内存来存储对象本身的元数据信息,例如数组长度等等信息。

二. 初始化和赋值

初始化:赋初值(第一次赋值)

使用new运算符创建数组对象,在堆上分配内存了,才将array初始化为一个真正的数组。

int[] array1 = new int[5];
int[] array2 = new int[]{1,2,3};

变量array1和array2都初始化了。里面存的都是地址。

new int[5] 这个数组对象,没有初始化,里面放的是默认值。

new int[]{1,2,3} 这个数组对象,初始化了。里面放的是{1,2,3}

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

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

相关文章

Expo项目 使用Native base UI库

装包: yarn add native-base expo install react-native-svg12.1.1 Index.js: import React from react import { View, Text } from react-native import useList from ./useList import { NativeBaseProvider, Button, Box } from native-base import styles f…

「C/C++」C/C++可变参数函数

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 当你需要…

机器学习深度学习——seq2seq实现机器翻译(详细实现与原理推导)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——seq2seq实现机器翻译(数据集处理) 📚订阅专栏:机器学习&…

明月之刃:armbian巧借nmtui管理网络连接

文章目录 nmtui简介安装nmtuinmtui使用连接wifi设置主机名称 nmtui简介 nmtui是NetworkManager TUI(Text User Interface)的缩写,它提供了一个可视化的界面来管理网络连接。但是,在Debian系统中,没有默认安装nmtui工具…

Vue电商项目--组件通信

组件通信6种方式 第一种:props 适用于的场景:父子组件通信 注意事项: 如果父组件给子组件传递数据(函数):本质其实是子组件给父组件传递数据 如果父组件给子组件传递的数据(非函数&#xf…

SpringBoot3集成Quartz

标签:Quartz.Job.Scheduler; 一、简介 Quartz由Java编写的功能丰富的开源作业调度框架,可以集成到几乎任何Java应用程序中,并且能够创建多个作业调度; 在实际的业务中,有很多场景依赖定时任务&#xff0c…

438. 找到字符串中所有字母异位词---字典匹配滑动窗口才是最优解

438. 找到字符串中所有字母异位词 原题链接:完成情况:解题思路:一开始字典匹配 参考代码:错误傻逼代码AC代码 原题链接: 438. 找到字符串中所有字母异位词 https://leetcode.cn/problems/find-all-anagrams-in-a-st…

CUDA执行模型

一、CUDA执行模型概述 二、线程束执行 1. 线程束与线程块 线程束是SM中基本的执行单元。 当一个线程块的网格被启动后,网格中的线程块分布在SM中。 一旦线程块被调度到一个SM中,线程块中的线程会被进一步划分成线程束。 一个线程束由32个连续的线程…

week4刷题

题解: F(n)F(n−1)F(n−2) 由于斐波那契数存在递推关系&#xff0c;因此可以使用动态规划求解。动态规划的状态转移方程即为上述递推关系&#xff0c;边界条件为 F(0)F(0)F(0) 和 F(1)F(1)F(1)。 class Solution { public:int fib(int n) {int MOD 1000000007;if (n < 2)…

Nginx 安装与部署

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/front-end-tutorial 】或者公众号【AIShareLab】回复 nginx 也可获取。 文章目录 虚拟机安装CentOS7.4Linux配置配置上网配置静态ip Nginx的安装版本区别备份克隆 安装编译安装报错解决 启动Nginx防…

SpringBoot+Mybatis-Plus实现增删改查超详细步骤

目录 一、介绍 二、前期准备工作 &#xff08;一&#xff09; 创建springboot项目和创建数据库 三、项目配置 &#xff08;一&#xff09;pom.xl导入相关依赖 1.导入依赖 &#xff08;二&#xff09;yml文件中配置连接数据库 2.配置yml文件 四、代码的编写 数据库展…

阿里云FRP内网穿透挂载多台服务器

1. FRP介绍 FRP (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用&#xff0c;它支持 TCP、UDP 协议&#xff0c; 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站&#xff0c; 帮你实现 公网 ←→ FRP(服务器…

vue复习。从安装到使用

vue官网&#xff1a;cn.vuejs.org vue安装 cnpm install -g vue/cli 查看是否安装成功 vue --version 创建一个项目 vue create vue-demo(项目名称) 这个取消掉。空格可选中或者取消。 运行项目&#xff1a; cd 进入到项目下 npm run serve 运行成功后&#xff0c;访问这…

Leetcode 21. 合并两个有序链表

题目描述 题目链接&#xff1a;https://leetcode.cn/problems/merge-two-sorted-lists/description/ 思路 两个链表都是升序链表&#xff0c;新建一个链表&#xff0c;引入伪头节点作为辅助节点&#xff0c;将各节点添加到伪节点之后&#xff0c;再用一个cur节点指向新链表的…

【C语言练习】——找出单身狗、详解atoi函数

目录 一.找出单身狗版本1版本2 二.atoi函数介绍atoi函数atoi函数的模拟实现 一.找出单身狗 版本1 题目&#xff1a; 一个数组中只有一个数字是出现一次&#xff0c;其他所有数字都出现了两次 找出这一个只出现一次的数字 一个数组比如是1、2、3、4、5、1、2、3、4 只有5出现一…

【力扣每日一题】2023.8.13 合并两个有序数组

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们两个升序数组&#xff0c;让我们合并它们&#xff0c;要求合并之后仍然是升序&#xff0c;并且这个合并操作是在数组1原地修改…

前沿分享-中距离射频取电

目前来看&#xff0c;微能源有四种技术路线&#xff0c;一是环境光采集、温差转换采集、无线射频采集和振动能量采集。 无线射频微能源是在通信设备通信过程中自然产生的&#xff0c;可以通过射频能量芯片实现无线射频取电&#xff0c;能瞬间大功率储电和安全驱动负载。 通过射…

基于微信小程序的应届大学生招聘平台的设计与实现

伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着众多智能手机飞速的发展&#xff0c;小程序这一名词已不陌生&#xff0c;越来越多的企业、公司、高校、医院等机构都会使用小程…

Linux上的五种IO模型

文章目录 五种模型阻塞非阻塞IO复用信号驱动异步 五种模型 阻塞非阻塞复用IO异步 阻塞 &#x1f446;read同步IO 非阻塞 EAGAIN&#xff1a;没有事件到达&#xff0c;返回值为-1&#xff0c; errno为EAGAIN IO复用 信号驱动 异步 &#x1f446;&#xff1a;异步IO&#xff…

Leetcode数组篇 Day1

移除元素&#xff08;暴力版&#xff09; 1.注意越界问题&#xff1a;ji1 起点&#xff0c;j < size 移除元素&#xff08;双指针版&#xff09; 1.快慢指针&#xff0c;新数组就是不含有目标元素的数组 快&#xff1a;获取新数组中的元素 慢&#xff1a;获取新数组需更新位…