我正在为Java编程课程完成任务,我不确定以下内容是如何工作的?下面的方法从数组和整数中获取值。应该将整数添加到数组中,然后在方法之外的其他方法中使用,等等,但是当方法没有返回数组的新内容时,它怎么能工作?方法中有一个空白?我错过了什么吗?预先一些帮助?是否有关于指针的东西?
public static void makeTransaction(int[] trans, int amount);
答案 0 :(得分:2)
Java中的数组是对象。如果修改方法内的trans
数组,则更改将反映在 1 之外。例如:
public static void modify(int[] arr)
{
arr[0] = 10;
}
public static void main(...)
{
int x = {1, 2, 3};
System.out.println(x[0]); // prints 1
modify(x);
System.out.println(x[0]); // now it prints 10
}
请注意,无法在Java中动态调整本机数组的大小。如果需要,您将不得不使用ArrayList
之类的东西。或者,您可以将返回类型更改为int[]
并返回一个新数组,并将新元素“追加”到旧数组中:
public static int[] makeTransaction(int[] trans, int amount)
{
int[] new_trans = Arrays.copyOf(trans, trans.length + 1);
new_trans[trans.length] = amount;
return new_trans;
}
1 还值得注意的是,作为对象,数组引用按值传递,因此以下代码在方法之外无效:
public void no_change(int[] arr)
{
arr = new int[arr.length];
}
答案 1 :(得分:0)
您无法向数组添加任何内容。 Java数组具有固定长度。事实上,你想做的事情是不可能的。您可以使该方法返回一个int[]
数组,但它将是一个全新的数组,包含初始数组的所有元素+作为参数传递的数量。
如果要向类似数组的结构中添加内容,请使用ArrayList<Integer>
。
答案 2 :(得分:0)
您是否必须按原样保留方法签名?
另外,你能更具体一点吗?当你说“应该将整数添加到数组中”时,你指的是amount
参数吗?如果是这样,那么该数额是如何增加的?我们将它放在数组中的某个位置还是放在末尾,从而延长数组的长度?
就指针而言,Java的指针是隐含的,所以如果你对语言知之甚少,那么你可能就不那么清楚了。无论如何,我相信Java方法通常会通过引用传递对象,而原始值则按值传递。但是,即便这样也不完全正确。如果要将对象参数分配给新对象,则当方法终止时,传递给方法的变量在执行之前的方法之后是相同的。但是,如果您要更改参数的成员属性,那么当方法终止时,这些属性值将与方法内部的值相同。
无论如何,回到你的问题,我相信这会有效,因为数组是一个对象。所以,如果你要做以下事情:
public static void makeTransaction(int[] trans, int amount)
{
trans[0] = amount;
}
// static int i;
/**
* @param args
*/
public static void main(String[] args)
{
int[] trans = {0,1,3};
makeTransaction(trans, 10);
for(int i = 0; i<trans.length; i++)
{
System.out.println(trans[i]);
}
}
数组的输出为:
10 1 3
但是,看这个。如果我决定如此实施makeTransaction
该怎么办:
public static void makeTransaction(int[] trans, int amount)
{
trans[0] = amount;
trans = new int[3];
}
您认为输出是什么?是否将它设置为全零或将与以前相同?答案是输出将与以前相同。这与我之前所说的有关。
我可能已经将指针指向了内存中的新对象,但是main方法内部指针的副本保持不变。它仍然指向内存中与之前相同的位置。当makeTransaction
方法终止时,我在其中创建的new int[3]
对象可用于垃圾回收。原始阵列保持不变。因此,当人们说Java通过引用传递对象时,它更像是按值传递对象的引用。