【零基础 快速学Java】韩顺平 p156-170 数组、3种初始化、赋值机制

2023-11-01

数组

数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即:数组就是一组数据

使用方法

使用方式1:动态初始化

在这里插入图片描述

使用方式2:动态初始化

在这里插入图片描述

使用方式3:静态初始化

在这里插入图片描述

注意事项

在这里插入图片描述

数组赋值机制

在这里插入图片描述

值传递 VS 引用传递

jvm的内存:栈+堆+方法区。

有这样一段代码:

int n1 = 10;
int n2 = n1;

将10赋值给n1,是在中赋值(因为是基本数据类型)。
将n1的值赋值给n2,就是把n1中的10复制给n2.
那么,之后对n2的值进行修改,与n1无关,这就是值传递

又有这样一段代码:

int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0] = 10;

对arr1赋值,其实是arr1 指向一个地址 ,这个地址在里面,这个地址的第1个元素(索引0)是1,第2个是2,第3个是3.
因此arr1[0]就会访问到第1个元素1,arr1[1]就会访问到第2个元素2…
如图:
在这里插入图片描述
那么,arr2=arr1的操作其实是把arr1所指向的地址拷贝一份,也就是说arr2和arr1指向同一份地址。

如图:
在这里插入图片描述
因此改变arr2[0]的值,其实就是改变arr2所指向的地址的第一个元素的值,那么arr1[0]的值也会变化。
这就是引用传递。

可以运行一下代码试试:

public static void main(String[] args)
    {
        int[] arr1 = {1,2,3};
        int[] arr2 = arr1;
        arr2[0] = 10;
        System.out.println(arr1[0]);
    }

数组拷贝(内容复制)

要求数据空间是独立的。

这样就行了:

public static void main(String[] args)
    {
        int[] arr1 = {1,2,3};
        int[] arr2 = new int[arr1.length];

        for(int i = 0;i < arr1.length; i++)
        {
            arr2[i] = arr1[i];
        }
    }

数组添加

要求:实现动态的给数组添加元素效果,实现对数组扩容。
步骤:

  1. 创建更大的数组,赋值
  2. 让旧数组指向新数组
public static void main(String[] args)
    {
        int[] arr1 = {1,2,3};
        int[] arr2 = new int[arr1.length+1];

        for(int i = 0;i < arr1.length; i++)
        {
            arr2[i] = arr1[i];
        }
        arr2[arr2.length-1]=4;
        arr1 = arr2;

        for(int i = 0;i < arr1.length; i++)
        {
            System.out.println(arr1[i]);
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【零基础 快速学Java】韩顺平 p156-170 数组、3种初始化、赋值机制 的相关文章

随机推荐

  • 把浏览器中的页面数据下载为pdf

    把浏览器中的页面数据下载为pdf 页面样子 https img blog csdnimg cn 7c0f58887b6c40fe8a7112800e9a8c93 png 下载后效果 只是内容不一致而已 样式差不多 文章目录 把浏览器中的页面
  • win10telnet配置和telnet用法

    Telnet协议 Telnet协议是TCP IP协议族中的一员 是Internet远程登录服务的标准协议和主要方式 它为用户提供了在本地计算机上完成远程主机工作的能力 在终端使用者的电脑上使用telnet程序 用它连接到服务器 终端使用者可
  • curl源码编译安装

    https curl haxx se download html 首先去curl官网下载对应版本 这里有个坑需要注意 如果下载的源码版本太高 编译是成功的 但是curl可执行文件访问https的时候还是会报各种奇怪的错误 所以我这里的做法是
  • No module named ‘typing_extensions‘

    No module named typing extensions 在运行程序时出现如下报错 解决方法 在运行程序时出现如下报错 File E Anaconda install Dic envs python38 lib site pack
  • nginx try_files用法 及Nginx location的一些配置

    实例 Yii2推荐ngnix try files配置 location try files uri uri index html args 找指定路径下文件 如果不存在 则转给哪个文件执行 try files 语法 try files fi
  • Java 内存模型(JMM),一看就懂 清晰明了

    一 线程私有的内存区域 1 程序计数器 当前线程所执行的字节码的行号指示器 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 它是程序控制流的指示器 2 虚拟机栈 线程调用 Java 方法时 每个方法每次调用都会
  • 基于形状的模板匹配来寻找稍微变形的图像

    方案 直接用整幅图像做模板匹配 下面是过程 原图 创建模板 下图是模板的轮廓 需要识别的图像 识别结果 代码 dev update off read image ModelImage food cocoa package model dev
  • Java 运行jar包变更配置文件与变量

    文章目录 前言 实现原理 不同环境的配置文件 变更配置变量 前言 为实现快速搭建和开发 项目以Springboot框架搭建 springboot搭建的项目可以将项目直接打成jar包并运行 无需自己安装配置Tomcat或者其他服务器 是一种方
  • 李宏毅2023机器学习作业HW03解析和代码分享

    ML2023Spring HW3 相关信息 课程主页 课程视频 Kaggle link Sample code HW03 视频 HW03 PDF 个人完整代码分享 GitHub Gitee GitCode P S 即便 kaggle 上的时
  • 我的C++学习日志

    安装Mac上的C 编辑器 clang cmake 安装方法 Xnode shell 编译 方法 在Mac上设置iTerm 设置方法 写出第一个 Hello World 的程序 学习计划 听youtube视频 阅读c primer
  • s5pv210-uboot移植前言

    最近找工作 买了块飞凌的ok210 使用s5pv210的开发板 但是最重要的nandflash居然不开源 很恼火 于是想从头自己在这个板子上开发 计划这个工作做两年 看看两年的业余时间到底能够搞出点什么东西出来 感觉难度应该很大 但是应该可
  • JDK17遇到报错 module java.base does not “opens java.util“ to unnamed module 问题解决

    在Java 9及以上版本运行应用程序时 在各种情况下都会发生此异常 详细可以参考 module java base does not opens java lang to unnamed module 滔天蟹 博客园 https www c
  • SpringSecurity学习笔记(四)注销登录、获取用户数据

    参考视频 编程不良人 注销登录 默认情况下 如果我们已经登录了 然后get方式访问 logout接口就会注销登录 下次再访问受限资源就会提示我们重新登录 我们可以在ss过滤器的配置里面添加下面的配置 and logout logoutUrl
  • tensorflow 运行时候遇到 Error in `python': double free or corruption (fasttop)

    参考https github com tensorflow tensorflow issues 6968 我是用pip install no binary all force reinstall numpy 解决的
  • 20171007离线赛总结

    考试时的思路 第一题先循环水一个80分出来 第二题先水70分 再用倍增枚举每一个坦克对应的下一个坦克 第三题直接上DFS 能拿多少拿多少 题解 第一题 S数 这道题 我打了个表 然后用二分法来做 记录每个答案的位置 即可得解 但是最后时间不
  • IDE/mingw下动态库(.dll和.a文件)的生成和部署使用(对比MSVC下.dll和.lib)

    文章目录 概述 问题的产生 基于mingw的DLL动态库 基于mingw的EXE可执行程序 Makefile文件中使用Qt库的 a文件 mingw下的 a 文件 和 dll 到底谁起作用 小插曲 mingw 生成的 a文件到底是什么 为啥m
  • jquery easyui combobox加载数量过多引起渲染页面缓慢问题

    有些时候 当我们用easyui combobox控件加载页面数据的时候 由于数据量过多 几千几万 而且如果操作频繁的话 进而会引起需要加载半天才能去打开下拉面板 还有可能卡死 其实这种问题主要时间浪费在了渲染下拉面板上面 作者在遇到这种问题
  • linux内核-网络

    网络栈 linux内核网络协议栈架构分析 全流程分析 干货 舞起勿忘的博客 CSDN博客 内核协议栈 https blog csdn net yming0221 column info linux kernel net netfilter的
  • Scala作业(9)---模式匹配&&&高阶函数

    模式匹配 1 利用模式匹配 编写一个swap函数 接受一个整数的对偶 返回对偶的两个组成部件互换位置的新对偶 下面是使用模式匹配编写的 swap 函数 接受一个整数的对偶 返回对偶的两个组成部分互换位置的新对偶 def swap pair
  • 【零基础 快速学Java】韩顺平 p156-170 数组、3种初始化、赋值机制

    数组 数组可以存放多个同一类型的数据 数组也是一种数据类型 是引用类型 即 数组就是一组数据 使用方法 使用方式1 动态初始化 使用方式2 动态初始化 使用方式3 静态初始化 注意事项 数组赋值机制 值传递 VS 引用传递 jvm的内存 栈