Java有关数组的相关问题

Java中的栈和堆的含义

存储局部变量:栈主要用于存储方法中的局部变量,包括基本数据类型(int、double、boolean等)和对象的引用(不包含对象本身)。

遵循后进先出原则:当一个方法被调用时,该方法的局部变量和参数会被压入栈中,这些变量会按照相反的顺序从栈中弹出。

大小固定栈的大小在程序启动时就已经确定,并且在运行过程中不会改变,如果栈溢出,会出StackOverflowError异常

特点:

快速访问:栈中的数据访问速度非常快,因为数据的存储和访问只涉及到简单的指针操作

内存管理简单:栈中的内存由系统自动分配和释放

存储对象:堆用于存储通过new关键字创建的对象和数组。这些对象在堆中分配内存,并由垃圾回收器管理。

动态分配:堆的大小在程序运行时可以动态变化。当创建新的对象时,堆会分配足够的内存来存储这些对象。如果堆内存不足,会抛出OutfMemoryError异常

特点:

相对较慢的访问速度:相对于栈,堆中的数据访问速度较慢,因为需要通过指针来定位对象,并且堆中的数据较为分散

需要垃圾回收:堆中的对象不再被引用时,需要由垃圾回收器来回收其占用的内存。

请问这段代码在内存中是怎么存储的?

public class Main {public static void main(String[] args) {int[] array={1,2,3,4};}
}

图如下:

解释:

因为数组是引用类型,那么什么是引用类型呢

引用类型存储的是存储的是对象在内存中的地址,对象是存储在堆中。

那么回归本问题,这个数组指向了一个对象地址即0x98(在堆山),因此在栈中的数组引用变量存储的值是堆中数组对象的地址。通过访问对象的地址,进而可以访问和修改这个地址中的元素。

请问这段代码输出的是什么

   public static void func1(int[] array1){array1=new int[10];}public static void main(String[] args) {int[] array={1,2,3,4};func1(array);for (int i = 0; i <array.length ; i++) {System.out.print(array[i]+" ");}System.out.println();}

结果依旧是1 2 3 5。为什么呢?

首先,array数组指向了一个对象的地址即0x98,进行方法传参后,array1的刚开始指向对象的地址是0x98,而又创建了一个数组array1,所以指向的对象的地址发生了改变,不再是0x98,而是0x88,所以对array1的元素更改并不会影响array的元素,所以array输出的依旧是1 2 3 4


请问这段代码输出的是什么

public class Main {public static void func2(int[] array1){array1[0]=99;}public static void main(String[] args) {int[] array={1,2,3,4};func2(array);for (int i = 0; i <array.length ; i++) {System.out.print(array[i]+" ");}System.out.println();}
}

输出的是 99,2,3,4

解释

array首先指向对象的地址是0x97,在方法传参后,把对象的地址给了array1,因为这俩个数组都指向了同一个对象,所以array1对对象值的更改会影响到array,所以最后输出的是99 2 3 4

结语:限于水平,本篇文章不足之处在所难免,还望大家见谅,如有错误,请指正下,谢谢大家!!!

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

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

相关文章

提升阅读体验,Balabolka让文字跃然“声”上

作为一个专业的语音合成工具&#xff0c;Balabolka为用户提供了全方位的文本朗读解决方案。这款软件不仅可以将各类文本实时转换为清晰的语音输出&#xff0c;还能将转换后的音频内容导出为多种主流格式。它强大的兼容性使其能够处理各类电子书和文档格式&#xff0c;让用户可以…

解决`-bash: ./configure:/bin/sh^M:解释器错误: 没有那个文件或目录`的问题

解决`-bash: ./configure:/bin/sh^M:解释器错误: 没有那个文件或目录`的问题 一、错误原因分析二、解决方法方法一:使用`dos2unix`工具方法二:使用`sed`命令方法三:使用`tr`命令方法四:在文本编辑器中转换方法五:在Windows系统中使用适当的工具三、预防措施四、总结在使…

第一部分:基础知识 1. 介绍 --[MySQL轻松入门教程]

什么是MySQL&#xff1f; MySQL 是一种广泛使用的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用结构化查询语言&#xff08;SQL&#xff09;来管理数据。MySQL 由瑞典公司 MySQL AB 开发&#xff0c;现在归 Oracle Corporation 所有。MySQL 是开源软件…

Flink双流Join

在离线 Hive 中&#xff0c;我们经常会使用 Join 进行多表关联。那么在实时中我们应该如何实现两条流的 Join 呢&#xff1f;Flink DataStream API 为我们提供了3个算子来实现双流 join&#xff0c;分别是&#xff1a; join coGroup intervalJoin 下面我们分别详细看一下这…

C# 匿名类型和匿名方法

在C#中&#xff0c;匿名类型和匿名方法是两个非常有用的特性&#xff0c;它们可以帮助我们更方便地处理数据和简化代码的编写。 一、匿名类型 (Anonymous Types) 匿名类型允许你在不显式定义类的情况下创建对象。编译器会自动为你生成一个类&#xff0c;其属性由你在对象初始…

【真正离线安装】Adobe Flash Player 32.0.0.156 插件离线安装包下载(无需联网安装)

网上很多人声称并提供的flash离线安装包是需要联网才能安装成功的&#xff0c;其实就是在线安装包&#xff0c;而这里提供的是真正的离线安装包&#xff0c;无需联网即可安装成功。 点击下面地址下载离线安装包&#xff1a; Adobe Flash Player 32.0.0.156 for IE Adobe Fla…

《Vue 组件化开发:构建可复用的模块》

一、Vue 组件化开发概述 组件化是 Vue.js 的核心概念之一&#xff0c;它允许将界面拆分成独立、可复用的组件&#xff0c;使得开发大型应用变得更加简单和高效。 组件的定义是实现应用中局部功能代码和资源的集合。Vue.js 的组件化用于将 UI 页面分割为若干组件进行组合和嵌套…

Python生日祝福烟花

1. 实现效果 2. 素材加载 2个图片和3个音频 shoot_image pygame.image.load(shoot(已去底).jpg) # 加载拼接的发射图像 flower_image pygame.image.load(flower.jpg) # 加载拼接的烟花图 烟花不好去底 # 调整图像的像素为原图的1/2 因为图像相对于界面来说有些大 shoo…

26页PDF | 数据中台能力框架及评估体系解读(限免下载)

一、前言 这份报告详细解读了数据中台的发展历程、核心概念、能力框架及成熟度评估体系。它从阿里巴巴的“大中台&#xff0c;小前台”战略出发&#xff0c;探讨了数据中台如何通过整合企业内部的数据资源和能力&#xff0c;加速业务迭代、降低成本&#xff0c;并推动业务增长…

C++中输入 不定长数据的方法

在未知 所需要输入数据的长度时 &#xff0c;可以用whilegetchar的方法。 char arr1[60] ;int i 0;char c ;while ((c getchar())! \n && c! EOF){arr1[i] c;i;}arr1[i]\0; 这里正常输入字符都是没问题的&#xff0c;while里面的内容都可以正常执行&#xff0c; 当…

Linux系统硬件老化测试脚本:自动化负载与监控

简介&#xff1a; 这篇文章介绍了一款用于Linux系统的自动化硬件老化测试脚本。该脚本能够通过对CPU、内存、硬盘和GPU进行高强度负载测试&#xff0c;持续运行设定的时长&#xff08;如1小时&#xff09;&#xff0c;以模拟长时间高负荷运行的环境&#xff0c;从而验证硬件的稳…

如何分段存储Redis键值对

说明&#xff1a;本文介绍针对一个value过长的键值对&#xff0c;如何分段存储&#xff1b; 场景 当我们需要存入一个String类型的键值对到Redis中&#xff0c;如下&#xff1a; &#xff08;缓存接口&#xff09; public interface CacheService {/*** 添加一个字符串键值…

C-操作符

操作符种类 在C语言中&#xff0c;操作符有以下几种&#xff1a; 算术操作符 移位操作符 位操作符 逻辑操作符 条件操作符 逗号表达式 下标引用&#xff0c;函数调用 拓展&#xff1a;整型提升 我们介绍常用的几个 算术操作符 &#xff08;加&#xff09;&#xff…

RabbitMQ 客户端 连接、发送、接收处理消息

RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务&#xff0c;不是像其他服务器一样&#xff0c;负责逻辑处理&#xff0c;然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息&#xff0c; 第一步&a…

浅析大数据时代下的网络安全

一、大数据时代下网络安全的现状 在全球化进程不断深入发展的情况下&#xff0c;互联网行业发展速度也更加迅猛&#xff0c;人们对网络信息的需求量不断增加&#xff0c;所以目前已经进入了大数据时代。 随着计算机技术的不断发展&#xff0c;我国互联网网络规模、网民数量、…

【SQL常用日期函数(二)】

SQL 常用日期函数-基于 Impala 3.4.0 接之前 SQL常用日期函数&#xff08;一&#xff09;介绍了实现计算上年末、上级末、上月末、上年同期的方法和函数&#xff0c;这次继续分享常用的SQL日期函数及使用场景。包括&#xff1a;DAYOFWEEK 函数、TRUNC 函数、LAST_DAY 函数。 …

计算机基础 原码反码补码问题

整数的二进制的表示形式&#xff1a;其实有三种 原码&#xff1a;直接根据数值写出的二进制序列就是原码 反码&#xff1a;原码的符号位不变&#xff0c;其他位按位取反就是反码 补码&#xff1a;反码1&#xff0c;就是补码 负数&#xff1a;-1 以补码形式存放在内存 写出 -1…

题海拾贝——生成元(Digit Generator,ACM/ICPC SEOUL 2005,UVa1583)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 欢迎点赞关注&#xff01; 1、题目描述 如果x加上x的各个数字之和得到y&#xff0c;就说x是y的生成元。给出(1<n<10…

笑话故事 第十七期

好久不见&#xff0c;以下是为您准备的笑话&#xff0c;希望能让您捧腹大笑&#xff1a; 1. 名字的误会 小明新交了一个女朋友&#xff0c;带回家给父母看。 妈妈问&#xff1a;“姑娘&#xff0c;你叫什么名字啊&#xff1f;” 女朋友&#xff1a;“阿姨&#xff0c;我叫小芳…

Clean Docker Images and Container by Cron Job

1.Cretae a clean_docker_containers.sh to clean containers (status: exited, dead) #!/bin/bash# 找到所有状态不正常的容器 containers$(docker ps -a --filter "statusexited" --filter "statusdead" --format "{{.ID}}")if [ -z "$…