javaSE学习-3-数组的定义与使用

news2024/11/27 3:43:10

1 数组的创建及初始化


int[] array1 = new int[10]; 
// 创建一个可以容纳10个int类型元素的数组 
double[] array2 = new double[5]; 
// 创建一个可以容纳5个double类型元素的数组 
String[] array3 = new double[3]; 
// 创建一个可以容纳3个字符串元素的数组

2 基本类型变量与引用类型变量的区别


public class Test {
    public static void main(String[] args) {
        int[] array = {1,2,3,4};
        fun1(array);
        System.out.println(Arrays.toString(array));
        fun2(array);
        System.out.println(Arrays.toString(array));

    }
    public static void fun1(int[] array){
        array = new int[]{11,22,33,44};
    }
    public static void fun2(int[] array){
        array[0] = 99;
    }
}

输出结果:

[1, 2, 3, 4]
[99, 2, 3, 4]

可以看出来fun1没有起作用, 但是fun2起作用了

为什么fun1没有起作用呢

解释如下:

在Java中,参数传递是按值传递的,这意味着方法接收的是实际参数值的副本(将实际参数的值复制一份传递给方法),而不是参数本身。

在`fun1`方法中,对`array`参数进行了重新赋值,但这只会在`fun1`方法内部产生影响,不会影响到`main`方法中的`array`。

这一句array = new int[]{11,22,33,44}; 可以分为两个步骤来理解:

  1. new int[]{11, 22, 33, 44}: 这一部分在堆内存中创建了一个新的整数数组,并将数组的引用(地址)返回。这个数组是匿名的,因为没有指定数组的变量名。

  2. array = ...:将步骤1中创建的数组的引用赋值给名为 array 的变量。现在,array 变量引用堆内存中创建的整数数组。

具体来说,当调用`fun1(array)`时,`array`的副本被传递给了`fun1`方法,然后在`fun1`方法内部,重新给`array`赋值为一个新的数组。这个新的数组在堆内存中分配,但它只在`fun1`方法的作用域内有效。一旦`fun1`方法执行完毕,这个新数组的引用就丢失了,而`main`方法中的`array`仍然引用原来的数组。

画了幅图 理解一下:

相比之下,在`fun2`方法中,修改的是原数组中的元素,而不是创建一个新的数组。因此,这个修改是在原数组的内存地址上进行的,对于调用`fun2`的`main`方法中的`array`是可见的,因此`fun2`方法的修改在`main`方法中是起作用的,导致输出 `[99, 2, 3, 4]`。

(简单点说, 形参实参引用类型存储的都是同一个地址, 都是指向栈中地址为0x12的数组对象)

因此不是传了引用就能够修改实参的值

学过C语言的同学注意一下,c语言中分传值调用和传址调用, 但是java中,严格意义来说,只有传值调用, 有时候传的值为地址

引用不相当于地址, 在java中, 引用是引用变量的简称,

  1. 引用变量存的是地址,
  2. 引用指向对象
 public static void main(String[] args) {
        int x = 10;
        System.out.println(x);
    }
    public static void func1(int x){
        x = 20;
    }

栈上的变量的地址是取不出来的

对于基本数据类型的变量,其实际的数值直接存储在栈上,而不是在堆上分配内存,并且在栈上的变量地址是无法直接获取的。

堆上的对象,包括通过 new 关键字创建的对象,是由Java虚拟机动态分配和释放内存的,可以通过引用来访问堆上对象,但通常不能直接获取对象的地址。

public static void main(String[] args) {
        int[] ret = func5();
        System.out.println(Arrays.toString(ret));
    }
    public static int[] func5() {
        int[] arr = {1,2,3,4,5};
        return arr;
    }

先new了一个数组, 在形参arr中存储的是栈上的地址, 再return给ret ret也拿到了栈上的0x99地址, 指向了数组{1,2,3,4}

小应用:数组作为返回值的斐波那契数列

public static void main(String[] args) {
        int[] arr = fib(10);
        System.out.println(Arrays.toString(arr));
    }
    public static int[] fib(int n) {
        if (n <= 0) {
            return null;
        }
        int[] arr = new int[n];
        arr[0] = arr[1] = 1;
        for (int i=2; i<n; i++) {
            arr[i] = arr[i-1] + arr[i-2];
        }
        return arr;
    }

数组转字符串

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

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

相关文章

新人做自动化测试,记住这5点涨薪指日可待...

关于新人如何做好自动化测试&#xff0c;以下是我个人的一些思考。 01、测试基础的重要性 作为一名测试新人&#xff0c;测试基础非常非常重要。这里说的基础&#xff0c;不仅仅是什么是软件测试、软件测试的目的&#xff0c;而是测试用例的设计能力。 因工作的原因&#xf…

教育机构小程序管理系统的全方位优化

随着互联网的快速发展&#xff0c;线上教育也日益受到人们的关注和欢迎。为了满足广大学生和家长的需求&#xff0c;教育机构纷纷开发出自己的小程序管理系统。本文将详细介绍如何使用乔拓云平台&#xff0c;一键开发出自己的教育机构小程序管理系统。 1.进入乔拓云后台 首先&…

记一次java for循环改造多线程的操作

背景 今天在开发质量平台时需要获取某些数据&#xff0c;要请求公司某个工程的OpenAPI接口A。此接口为返回通用数据的接口&#xff0c;且接口本身的RT都在2&#xff5e;3秒之间。使用该接口&#xff0c;需要进行两次循环获取&#xff0c;然后对返回数据进行处理组装&#xff0…

弹窗“由于找不到xinput1_3.dll,无法继续执行代码”的几种解决方法分享

日常中&#xff0c;我们在使用电脑过程中&#xff0c;偶尔会遇到一些错误提示“由于找不到xinput1_3.dll,无法继续执行代码”&#xff0c;这个报错会让程序无法正常运行的情况。那么&#xff0c;xinput1_3.dll到底是什么&#xff1f;它丢失会对计算机产生什么影响呢&#xff1f…

健康卤味思想引领市场新潮流,卤味市场迎来健康变革

健康卤味思想正在逐渐渗透到卤味市场中&#xff0c;引领着消费者对于卤味产品的选择和需求。这一变革不仅为消费者带来了更加健康、美味的卤味产品&#xff0c;也为卤味市场注入了新的活力。 一、健康卤味思想的兴起 随着消费者对于健康饮食的关注度不断提高&#xff0c;健康卤…

频谱论文:基于张量Tucker分解的频谱地图构建算法

#频谱# [1]陈智博,胡景明,张邦宁 郭道省.(2023).基于张量Tucker分解的频谱地图构建算法.电子与信息学报(11),4161-4169. &#xff08;陆军工程大学&#xff09; 研究内容 将动态电磁环境的时变频谱地图建模为3维频谱张量&#xff0c;通过张量Tucker分解提取出具有物理意义的核…

Linux---Ubuntu软件卸载

1. 软件卸载的介绍 Ubuntu软件卸载有两种方式: 离线安装包的卸载(deb 文件格式卸载&#xff09;在线安装包的卸载(apt-get 方式卸载) 2. deb 文件格式卸载 命令格式: sudo dpkg –r 安装包名 -r 选项表示安装的卸载 dpkg 卸载效果图: 3. apt-get 方式卸载 命令格式: …

svn 安装

安装系统 ubuntu 22 安装命令&#xff1a; sudo apt-get install subversion 创建第一个工程&#xff1a; 创建版本库、项目 1、先创建svn根目录文件夹 sudo mkdir /home/svn 2、创建项目的目录文件夹 sudo mkdir /home/svn/demo_0 svnadmin create /home/svn/demo_0 配置&a…

【Redis】五、Redis持久化、RDB和AOF

文章目录 Redis持久化一、RDB&#xff08;Redis DataBase&#xff09;触发机制如何恢复rdb文件 二、AOF&#xff08;Append Only File&#xff09;三、扩展 Redis持久化 面试和工作&#xff0c;持久化都是重点&#xff01; Redis 是内存数据库&#xff0c;如果不将内存中的数据…

单元测试计划、用例、报告、评审编制模板

单元测试支撑文档编制模板&#xff0c;具体文档如下&#xff1a; 1. 单元测试计划 2. 单元测试用例 3. 单元测试报告 4. 编码及测试评审报告 软件项目相关资料全套获取&#xff1a;软件项目开发全套文档下载-CSDN博客 1、单元测试计划 2、单元测试用例 3、单元测试报告 4、编码…

使用数组模拟栈的相关操作【栈1.1】

public class ArrayStackDemo {public static void main(String[] args) {ArrayStack arrayStack new ArrayStack(4);Scanner sc new Scanner(System.in);boolean loop true;char key ;while (loop) {System.out.println("栈操作菜单项");System.out.println(&q…

python绘图总结

1 二维图像 1.1 二维曲线 plot(x, y, ls"-", lw1.5, labelNone)x, y&#xff1a;横坐标和纵坐标ls&#xff1a;颜色、点标记、线型列表&#xff0c;如 ls‘r*-’ 表示红色实线、*形点&#xff0c;ls‘g.’ 表示绿色散点lw&#xff1a;线宽度label&#xff1a;线标签…

ros2+在Ubuntu上安装gazebo

Binary Installation on Ubuntu(Ubuntu上binary方式安装gazebo) Harmonic binaries are provided for Ubuntu Jammy (22.04) and Ubuntu 24.04 (when its released). &#xff08;在Ubuntu22.04或者24.04上都是安装Harmonic版本的gazebo&#xff09;The Harmonic binaries are…

Repo代码仓库搭建

使用rockchip sdk二次开发&#xff0c;代码十几个G&#xff0c;都放在一个git仓库的话&#xff0c;每次git status要等好久&#xff0c;决定拆分一下&#xff0c;官方是用repo做代码管理的&#xff0c;我打算也搭建个类似开发环境。 1.首先在git服务器上创建一个manifest仓库&…

深度学习中常见的激活函数

前文介绍 我们在前面了解到了线性回归模型&#xff0c;其实我们可以把线性回归看成一个单个的神经元&#xff0c;它实际上就完成了两个步骤 1.对输入的特征的加权求和 2.将结果通过传递函数&#xff08;或者激活函数&#xff09;输出 这里我们提到了传递函数&#xff08;或者…

ESP32 核心转储闪存配置已损坏

问题描述&#xff1a;使用Platform 开发ESP32-S3 报错通过串口打印报错提示为核心闪存损失具体报错如下。 ELF file SHA256: 25c739c3d81d8f15 E (183) esp_core_dump_flash: Core dump flash config is corrupted! CRC0x7bd5c66f instead of 0x0 Rebooting... ESP-ROM:esp32s3…

如何去“面试”软件测试工程师?

站在用人单位的角度问这个问题&#xff0c;但是相信很多人搜到这个问题&#xff0c;目的是为了知道如何准备面试&#xff0c;以便拿到软件测试工程师的Offfer&#xff08;所以我会更多站在求职者的角度去解答这个问题&#xff09;。 但我们要清楚&#xff0c;找工作是出卖服务…

可能是全网最详细的线性回归原理讲解!!!

ps&#xff1a;此处的特征向量有别于线性代数中的特征向量&#xff0c;准确来讲这里的特征向量是一个样本的所有属性值。 用梯度下降慢慢逼近这个最小值点 本文图片来源于可能是全网最详细的线性回归原理讲解&#xff01;&#xff01;&#xff01;_哔哩哔哩_bilibili 可以结合…

汽车火花塞行业分析:全球市场需求量约为26.3亿个

在汽车日常保养里,更换火花塞算是比较常见的一种,爱车懂车的车主们都非常清楚火花塞对于汽车的重要性,可以说火花塞直接影响到发动机的运作,决定了汽车能否顺利启程。 火花塞(sparkplug)&#xff0c;俗称火咀&#xff0c;它的作用是把高压导线(火嘴线)送来的脉冲高压电放电&…

使用kali进行抓包以及aircrack-ng跑包和hashcat跑包

文章目录 一、连接无线网卡二、抓取TCP握手包三、aircrack-ng跑包和hashcat跑包1.aircrack2.Hashcat 四、其他 环境&#xff1a; VMware Workstation 16 Pro kali-linux-2023.1 64位 python3.9.13 RT3070-USB无线网卡 一、连接无线网卡 1.首先按下winr打开运行窗口 2.输入…