java 参数传递 空对象 null
来源:互联网 发布:配乐网 知乎 编辑:程序博客网 时间:2024/05/02 04:52
前两天,写程序时候,想传递一个数组名给一个函数,然后给数组new一下,并初始化数据,这样就使用非return,获得了一个初始化过对象,但是运行程序报“NullPointerException”。这是为什么???代码如下:
public class Test_object {public int i;public void star(){int a[] = null;int i;init_a(a);for(i=0; i<a.length; i++){System.out.println(a[i]);}}public void init_a(int[] a){int i=0;a = new int[5];for(i=0;i<a.length;i++) a[i] = i++;}public static void main(String[] args) {Test_object to = new Test_object();to.star();}}
在开始讲解前,讲下预备知识!
1.java的函数调用的时候传递的是对象的引用。
2.变量存储在两块内存,变量名放在栈内存中,对象放在堆内存中。
3.对于对象,java传递参数时候,会将堆内存的地址传给函数。
4.数组在java中类似对象。
5.只声明不进行new的对象,不会在堆内存中开辟空间。
让我们回想下基本类型int、char等等的参数传递方式,是值传递。我们知道基本类型的变量存放在栈内存中,而没有存放在堆内存中。另外,在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。我们知道当值传递的时候,虚拟机在栈中开辟一块空间a,复制被传递的基本类型变量,然后将这个空间a交给目标函数。我们知道对象变量,也是存放在栈中的。那么我们猜想java中的引用传递应该是这样的过程:在栈中开辟一块空间b,然后将对象变量的值(也就是对象在对内存的地址)赋给b,这样就可以在函数中调用这个对象了,也就是所谓的引用传递。
总结:
1.值传递就是:新生成一个变量指向这个变量
2.此题的错因:这里我们没有给数组a在堆中开辟空间,那么a的栈内存中没有对象的地址值,所以此时退化成值传递
0 0
- java 参数传递 空对象 null
- 空对象(null Object) in Java
- Java Null Object Pattern(空对象模式)
- Java参数引用传递之例外:null
- Java空字符串、字符串空对象与null的区别
- Java对象的参数传递
- java参数传递中的对象传递
- java 对象参数传递与对象复制
- Java中null不等于任何非空的对象
- Java判断对象是否为空(包括null ,"")
- Java 空对象设计模式(Null Object Pattern) 讲解
- Java判断对象是否为空(包括null ,"")
- java判断空字符串和对象是否为null
- 【java】方法应该返回空对象还是null
- Java中函数重载和null参数的传递
- JAVA判空、null
- java空 null 判断
- Java 中关于String 对象的空对象(null), 空值(""),空格(" ")
- Jquery的on,off事件详解,如何利用命名空间来解绑特定的事件
- 使用sbt构建IndexedRDD开发环境
- 返回当前 Unix 时间戳和微秒数
- 正则表达式30分钟入门教程
- 利用xilinx FSL总线自定义IP核(下)
- java 参数传递 空对象 null
- 别总抱怨,你可能还没尝试过CIA易验证?
- Strom安装
- ubutu 12.0下安装hbase步骤以及hbse的简单命令操作
- 公钥,私钥和数字签名这样最好理解
- 在Win7 64位上安装mySQL5.1和Navicat10.0
- PBOC/EMV 中SDA和DDA简介
- 将请求url中包含的主键id取出来,进行操作
- Javapns-sdk16-2.2.1多线程推送