Java对象在堆上的猜想

import java.util.Scanner;

public class Work36 {

public static void main(String[] args) {
	int n;
	Scanner scanner = new Scanner(System.in);
	System.out.println("您要输入几个数");
	n = scanner.nextInt();
	int[] a = new int[n];
	for (int i = 0; i < n; i++) {
		System.out.println("请输入一个数");
		a[i] = scanner.nextInt();
	}

	// 这里把输入的数组打印一下
	System.out.println("你输入的数组为");
	for (int i = 0; i < a.length; i++) {
		System.out.print(a[i]);

	}
	System.out.println();
	System.out.println("输入移动的位数");
	int m = scanner.nextInt();
	scanner.close();
/*	int[] c = move(a, m);*/
	a=move(a, m);
	System.out.println("a的"+a.hashCode());
	

	// 这里把输入的数组打印一下
	System.out.println("你的输出的数组为");
	for (int i = 0; i < a.length; i++) {
		System.out.print(a[i]);

	}

}

public static int[] move(int[] a, int m) {
	// 这里,使用在看数据结构的时候,实现循环队列的里面的一点关于绝对值的思想,这里绝对值是数组的长度
	int length = a.length;
	int[] b = new int[length];// 使用数组b来保存修改过后的数组
	System.out.println("局部量"+b.hashCode());
	for (int i = 0; i < length; i++) {
		b[i] = a[((i - m-1) + length )% length];

	}
	return b;

}

}

在C++中,所有的对象存储是在堆上(不管是不是在调用方法里面定义的),但是,int []b,b 存储在上开辟栈的空间,名称为b,里面存的是b对应的数组在堆上的地址,栈里面存的是数组在堆上具体的空间地址。方法外面呢,定义int []a的时候,具体操作也是这样。而,当**a=move(a,m)**之后,a里面存的就是b这个数组在堆上的地址啦,因为move()函数的调用返回的是一个地址,而这个地址,就是b这个数组在堆上的地址,现在,重新将它赋跟a。

下面说下:
int []a=new int[10]。
new int[10]在堆上开辟10个空间,假设这个10个空间的在内存中的地址为x.
int []a,在栈上开辟一块空间,名字是a,里面呢,存的就是x。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值