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

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

在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}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

配置:Terminal和oh-my-posh

目录 命令行安装oh-my-posh查看安装情况配置PowerShell启用oh-my-posh、设置主题配色安装字体Terminal中的配置 命令行安装oh-my-posh Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString(https://ohmy…

YAPi在线接口文档简单案例(结合Vue前端Demo)

在前后端分离开发中,我们都是基于文档进行开发,那前端人员有时候无法马上拿到后端的数据,该怎么办?我们一般采用mock模拟伪造数据直接进行测试,本篇文章主要介绍YApi在线接口文档的简单使用,并结合Vue的小d…

流量,日志分析--理论

提供资料: Wireshark 基本语法,基本使用方法,及包过虑规则 : https://blog.csdn.net/qq_17457175/article/det ails/53019490 ctf 常见流量分析题目类型 : https://ctf-wiki.org/misc/traffic/introduction/ windows 日志 : https://jone…

IntelliJ IDEA和Android studio怎么去掉usage和作者提示

截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码&#xf…

5.PyCharm基础使用及快捷键

在前几篇文章中介绍了PyCharm的安装和汉化,本篇文章一起来看一下PyCharm的基本用法和一些快捷键的使用方法。 本篇文章PyCharm的版本为PyCharm2023.2 新建项目和运行 打开工具,在菜单中——文件——新建项目 选择项目的创建位置(注意最好不要使用中文路径和中文名项目名称…

基于Gradio的GPT聊天程序

网上很多别人写的,要用账号也不放心。就自己写了一个基于gradio的聊天界面,部署后可以本地运行。 特点: 可以用openai的,也可以用api2d,其他api可以自己测试一下。使用了langchain的库 可以更改模型,会的…

IO密集型服务提升性能的三种方法

文章目录 批处理缓存多线程总结 大部分的业务系统其实都是IO密集型的系统,比如像我们面向B端提供摄像头服务,很多的接口其实就是将各种各样的数据汇总起来,展示给用户,我们的数据来源包括Redis、Mysql、Hbase、以及依赖的一些服务…

IP协议

网络层 对于网络层来说,它是传输层协议的具体实施,那么它具体是如何实施的呢? IP协议 IP能够实现将数据从A主机送到B主机,在网络中,每一个IP报文都包含了它的目标网络和目标主机。 而IP协议就是网络层使用的协议。 I…

【mysql】—— 表的约束

目录 序言 (一)空属性 (二)默认值 (三)列描述 (四)zerofill (五)主键 (六)自增长 (七)唯一键 &#…

stm32_断点调试无法进入串口接收中断

先说结果,可能是stm32调试功能/keil软件/调试器(试过STLINK和JLINK两种)的问题,不是代码; 1、入坑 配置完串口后,可以发送数据到串口助手,但不能接收数据并做处理,所以第一步&…

安全防御(3)

1.总结当堂NAT与双机热备原理,形成思维导图 2.完成课堂nat与双机热备试验 引用IDS是指入侵检测系统,它可以在网络中检测和防御入侵行为。IDS的签名是指根据已知入侵行为的特征制定的规则,用于检测和警告可能存在的入侵行为。签名过滤器可以根…

图论——最短路算法

引入&#xff1a; 如上图&#xff0c;已知图G。 问节点1到节点3的最短距离。 可心算而出为d[1,2]d[2,3]112,比d[1,3]要小。 求最短路径算法&#xff1a; 1.Floyd(弗洛伊德) 是一种基于三角形不等式的多源最短路径算法。边权可以为负数 表现为a[i,j]a[j,k]<a[i,k]。 …

9.2.2Socket(TCP)

一.过程: 1.建立连接(不是握手),虽然内核中的连接有很多,但是在应用程序中,要一个一个处理. 2. 获取任务:使用ServerSocket.accept()方法,作用是把内核中的连接获取到应用程序中,这个过程类似于生产者消费者模型. 3. 使用缓冲的时候,注意全缓冲和行缓冲. 4.注意关闭文件资源…

排序算法(二)

1.希尔排序-Shell Sort 1.算法原理 将未排序序列按照增量gap的不同分割为若干个子序列&#xff0c;然后分别进行插入排序&#xff0c;得到若干组排好序的序列&#xff1b; 缩小增量gap&#xff0c;并对分割为的子序列进行插入排序&#xff1b;最后一次的gap1&#xff0c;即整个…

SQL 基础查询

msyql 不区分大小写 DDL 数据定义语言 查询 show databases create database db01 创建数据库 create database if not exists db01 创建数据库 删除数据库 drop database if exists db01 使用数据库 use 数据库名 CREATE TABLE tb_user(id int PRIMARY KEY COMMENT i…

简单易用且高效的跨平台开发工具:Xojo 2023 for Mac

Xojo for Mac是Mac平台上一个跨平台的针对桌面、Web、移动和Raspberry Pi的快速应用程序开发软件。与其他多平台开发工具相比&#xff0c;Xojo for Mac为开发人员提供了显着的生产率提高。 Xojo for Mac具有拖放功能&#xff0c;使您能够快速创建用户界面设计&#xff0c;然后…

【Linux初阶】进程间通信介绍 管道

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;进程间通信介绍&#xff0c;管道概述&#xff0c;匿名管道应用&#xff0c;命名管道应用 &#x1f6a2;&#…

如何在 Spring Boot 中集成日志框架 SLF4J、Log4j

文章目录 具体步骤附录 笔者的操作环境&#xff1a; Spring Cloud Alibaba&#xff1a;2022.0.0.0-RC2 Spring Cloud&#xff1a;2022.0.0 Spring Boot&#xff1a;3.0.2 Nacos 2.2.3 Maven 3.8.3 JDK 17.0.7 IntelliJ IDEA 2022.3.1 (Ultimate Edition) 具体步骤 因为 …

HTTP代理编程:Python实用技巧与代码实例

今天我要与大家分享一些关于HTTP代理编程的实用技巧和Python代码实例。作为一名HTTP代理产品供应商&#xff0c;希望通过这篇文章&#xff0c;帮助你们掌握一些高效且实用的编程技巧&#xff0c;提高开发和使用HTTP代理产品的能力。 一、使用Python的requests库发送HTTP请求&a…

【ElasticSearch入门】

目录 1.ElasticSearch的简介 2.用数据库实现搜素的功能 3.ES的核心概念 3.1 NRT(Near Realtime)近实时 3.2 cluster集群&#xff0c;ES是一个分布式的系统 3.3 Node节点&#xff0c;就是集群中的一台服务器 3.4 index 索引&#xff08;索引库&#xff09; 3.5 type类型 3.6 doc…