• java对象指向问题


    刷到一个题脑子一下子没有反应过来记录一下子学习 如下:

     答案就是A 这是为什么呢     我乍一看nums1   new 了一个数组对象并把长度定为3,nums2声明了一个数组,并定义了12345的值,如果

    把nums2赋值给nums1它不是会越界嘛长度不一样嘛,这是我乍一看的想法。

    理解了好一会后发现这个题考查的是对象指向问题:

     再深入理解一下的话就是对象的声明和new了   声明对象一般用于基本数据类型,基本数据类型不能用new来声明,但是可以使用它们对应的封装类来写

    public static void main(String[] args){
            /*int []array = new int [4];
            array[0]=10;
            array[1]=20;
            System.out.print(array[0]+":"+array[1]);*/
            int[] nums1 = new int[0];
            int nums2[]= {1, 2, 3, 4, 5};
            nums1 = nums2;
            for (int x : nums1){
            System.out.print(x + ":");
            }
            
            for (int i = 0; i < nums2.length; i++) {
            System.out.println(nums2[i]);    
            }
            
            }

    new一个对象时,会在堆中开辟出一个内存空间,同时在栈中生成你创建的变量这个变量指向对应的内存空间,这相当于key和value的关系当堆中的空间没有对象指向它时即为null时,它将会被系统回收。

    而声明对象是直接在栈中声明。

    所以题目的问题是指向,当nums2指向这个堆中的内存时,它的值就会变成nums2,因为nums1也指向这个堆内存,即nums1=nums2

    个人学习,内容拙劣见谅QAQ

  • 相关阅读:
    如何测试私有/受保护的方法? (译文)
    推荐一款vs.net中的版本号管理工具,
    ILMerge 合并多个程序集为一个.
    https://XXX/.xml Error:800C000E
    an easy way to debug windows service in .net
    提高安全性, 删除IIS中的response http header
    我的<程序人生>的一点看法.
    vs.net 2005 beta2 之痛
    ANT打包
    Linq to xml: XDocument对象
  • 原文地址:https://www.cnblogs.com/2979100039-qq-con/p/13062833.html
Copyright © 2020-2023  润新知