Java学习日记1

先看代码:
public class Main {
public static void main(String[] args){
int[] arr = new int[3]; //动态初始化,创建3块连续的空间
System.out.println(arr);
}
}
首先说一下栈,堆。栈最典型的特点就是先进先出,在Java程序执行的过程中, .class文件首先被装入内存,栈储存局部变量,即定义在方法声明上和方法中的变量;堆用来储存new出来的数组或对象。此外还有方法区、本地方法区和寄存器等。


图片.png

上图为上述代码的内存图。

再看以下代码:
public class Main {
public static void main(String[] args){
int[] arr = new int[3]; //动态初始化,创建3块连续的空间
System.out.println(arr);
arr[0] = 10;
arr[1] = 20;
System.out.println(arr[0]);
System.out.println(arr[1]);
}
}
执行结果如下:


图片.png

在这里,直接打印arr产生的结果 [I@4554617c 表示什么呢?
直接打印数组名,结果为[I@4554617c ,其中[表示数组的维数,有几个就代表几位数组,I表示数组为int型,@是默认的,最后的4554617c代表数组的地址。
内存图如下:


图片.png

如果定义一个arr2并让他等于arr;那么其实这两个数组引用指向的是同一个内存块,改变其中任意一个,都是对内存块中的数据进行操作。
下图表示新建arr1和arr2两个数组,然后定义arr3=arr2,并对其进行操作:


图片.png

二维数组的内存图如下:


图片.png

此外再多说一个知识点:基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失;引用数据类型的值传递,改变原值,因为即使方法弹栈,但是对内存数组对象还在,可以通过地址继续访问。

Java中到底是传值还是传址?
java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令 (Java之父))。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 5,531评论 0 9
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周书达阅读 4,090评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,686评论 18 399
  • 我这个人,算不上吃货。但是,胃好像比较大,吃的东西也多。对我来说,一般都要吃到十一分。 一种情况:平时只要身边有吃...
    多笑笑_阅读 1,738评论 0 1
  • 一个人的距离,你回首看不见我满目的伤,我抬头看得见你远去的背影 ———— 记 人生的旅途不管怎么走,我们都会际遇很...
    一苜阅读 2,548评论 1 1

友情链接更多精彩内容