如下的代码有什么问题?

wingofsea 2005-05-09 08:01:02
package test;

public class AssignTest {
public long[][] time = null;
public AssignTest() {
}

public void setArray(long[][] a) {
a = new long[3][4];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
a[i][j] = i * j;
}
}
}

public void printArray() {

setArray(this.time);//通过这个函数对成员变量进行赋值
for (int i = 0; i < time.length; i++) {
for (int j = 0; j < time[i].length; j++) {
System.out.println(time[i][j]);
}
}
}

public static void main(String[] args) {
AssignTest at = new AssignTest();
at.printArray();
}
}


java.lang.NullPointerException

at test.AssignTest.printArray(AssignTest.java:20)

at test.AssignTest.main(AssignTest.java:29)

Exception in thread "main"
...全文
134 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
midthinker 2005-05-09
  • 打赏
  • 举报
回复
呵呵,本人对此问题做了小小的实例以说明问题的核心,由于内容较长,加之近期此问题较为普遍,所以特地新开一帖以小谈该问题,如果大家对此问题感兴趣可以观看我在本版的帖子

初学 java reference 机制 (作者:midthinker)

http://community.csdn.net/Expert/topic/3993/3993622.xml?temp=.3489954

hehe...
yanloveyan2004 2005-05-09
  • 打赏
  • 举报
回复
java编程思想说的应该是对的吧!基本类型是值传递,其它对象间是引用传递,这些问题怎么说吧,也没有一个很权威的说法,你用jbulider调一段代码就明白了
唯为 2005-05-09
  • 打赏
  • 举报
回复
我记得Java全部都是传值……
w1010b 2005-05-09
  • 打赏
  • 举报
回复
赞成,数组属于对象,应该是引用传递,而引用本身是传值调用的
yanloveyan2004 2005-05-09
  • 打赏
  • 举报
回复
数组不是基本类型,所以是引用传递吧
yanloveyan2004 2005-05-09
  • 打赏
  • 举报
回复
本人觉得java中基本类型是值传递,其它对象间是引用传递!也许我还不是很清楚
midthinker 2005-05-09
  • 打赏
  • 举报
回复
首先更正 iCharlene(我爱阿sa) 朋友的观点,JAVA数组的调用并非以值传递,而是以引用传递。^^
这个问题是一个十分典型的关于java reference的问题,而大多数朋友在这样的问题上产生的困惑源自于C\C++的机制,因为在关于reference传递的问题上,JAVA 与 C\C++
yanloveyan2004 2005-05-09
  • 打赏
  • 举报
回复
public void printArray() {

setArray(this.time);//this.time为null
for (int i = 0; i < time.length; i++) { //time为null有异常
for (int j = 0; j < time[i].length; j++) {
System.out.println(time[i][j]);
}
}
}
其实在这段程序一直没有对time进行初始化,一直为null,setArray(this.time)对time根本没处理,就跟
setArray(null)一样
spiritmonger 2005-05-09
  • 打赏
  • 举报
回复
具体问题不明白,看看虚拟机的东西或许有帮助,我觉得java里面的方法都是传值的,也就是说你在方法里对一个参数的赋值,不会影响那个参数的值的。
iCharlene 2005-05-09
  • 打赏
  • 举报
回复
java是传值调用,你那个a的声明在public void setArray(long[][] a)
里。


public void setArray() {
time = new long[3][4];
for (int i = 0; i < time.length; i++) {
for (int j = 0; j < time[i].length; j++) {
time[i][j] = i * j;
}
}
}
ifsohx 2005-05-09
  • 打赏
  • 举报
回复
奇怪.mark

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧