解决方案 »
- 在dos中.class文件无法运行,但是却由.java的文件生成.class的文件
- 请教java.lang.NoSuchMethodError: main问题
- 问一个for 嵌套 if的问题,新手晕了。
- 请问我用getInputStream()方法在Telnet服务器得到数据流后,怎样把得到数据流的文本内容保存到文档中呢?
- 一个根据数据库的值自动返回单选复选框是否被选中的问题
- 代码?
- 昨天UML老师上课的时候说面向对象主要解决软件业的重用的问题,有没有哪位哥哥给指点一二啊?真的还是有点不明白。
- help me
- 简单问题,急急急!
- 请问:如何用JAVA实现推 技术的聊天室
- System.out.println((char)165573);
- 关于双缓冲绘图的困扰 求大神帮助
public class ArrayInsert {
public static void main(String[] args)
{
int[] a={1,2,3,4,5,6,7,8,9};
a=insert(a,3,666);
printArray(a);//输出1,2,3,4,5,6,7,8,9、、、、为什么呢?
//不是在前面insert中已经变了么?
}
public static int[] insert(int[] a,int position,int num)
{
int len=a.length;
int[] b=new int[len+1];
for(int i=0;i<a.length;i++)
b[i]=a[i];
a=b;//扩容
for(int i=len;i>position;i--)
{
a[i]=a[i-1];
}
a[position]=num;
printArray(a);//输出1,2,3,666,4,5,6,7,8,9
return a;
}
public static void printArray(int[] a)//打印数组
{
for(int i=0;i<a.length;i++)
System.out.println(a[i]+" ");
System.out.println();
}
}结果:1 2 3 666 4 5 6 7 8 9
1 2 3 666 4 5 6 7 8 9
分析Java对象的引用和地址的关系,理解地址
{
int len=a.length;
int[] b=new int[len+1];
for(int i=0;i<a.length;i++)
b[i]=a[i];
a=b;//扩容
for(int i=len;i>position;i--)
{
a[i]=a[i-1];
}
a[position]=num;
return a;
}public static void main(String[] args)
{
int[] a={1,2,3,4,5,6,7,8,9};
int[] b = insert(a,3,666);
printArray(b);//输出1,2,3,4,5,6,7,8,9、、、、为什么呢?
//不是在前面insert中已经变了么?
}希望有帮助
估计楼主的第二次是在main里输出的,insert方法中改变a=b中b是新数组对象,是把局部变量a指向新数组b,外面的变量a仍然指向原来的数组对象.
所以原来的数组引用a还是指向原来的堆内存空间,新声明的数组b在方法结束时也就成为了“垃圾”等待着被回收。此时楼主应该将新声明的数组的引用返回给方法调用处。 public static void insert(int[] a,int position,int num)
{
int len=a.length;
int[] b=new int[len+1];
for(int i=0;i<a.length;i++)
b[i]=a[i];
a=b;//扩容 --- 此处只不过是临时的而已
for(int i=len;i>position;i--)
{
a[i]=a[i-1];
}
a[position]=num;
printArray(a);//输出1,2,3,666,4,5,6,7,8,9
}
楼主你把a=b这个去掉看看。本来insert方法里是可以改变main方法里数组a的值的,但是你先把a指向b了,这样改变a 改变的就是数组b
{
int[] a={1,2,3,4,5,6,7,8,9};
insert(a,3,666);
printArray(a);//输出1,2,3,4,5,6,7,8,9、、、、为什么呢?
//不是在前面insert中已经变了么?
}
你输出的那个a是 你定义的那个a数组 虽然你的insert方法将a改变 但是你并没有返回回来并且给以上a赋值 所以输出的肯定还是原来的数组哇 这样说能懂不呢