Call by Value i Java
Så vidt jeg har forstået benytter Java sig af Call by Value når man kalder en metode og sender en parameter med.Nu sidder jeg så og leger med noget sortering, hvor jeg tester tidskompleksitet for bubblesort. Jeg laver et array med nogle ramdom tal og sorterer dem, men min metode sorterer faktisk arrayet, selvom den ikke skulle. Neden for er et eksempel, for jeg ført udskriver det u-sorterede array derefter kalder jeg bubbleSort(num) som laver en sortering, men den laver faktisk sorteringen på num, selvom min metode ikke piller ved num, den benytter kun det paramter array den får sendt med. Det er her mit lidt mærkelige problem kommer ind, sorteringen bliver faktisk udført på num, hvilket jeg ville mene skulle kræve en call by reference. Er der nogle der kan forklare mig hvad der sker siden at den faktisk sortere num ?
int[] num = new int[10000];
for (int i = 0 ; i < num.length ; i++)
num[i] = (int)(1+Math.random()*100);
bubbleSort(num);
for (int i = 0 ; i < num.length ; i++)
System.out.print(num[i]+ " ");
selve bubbleSort metoden ser sådan her ud:
public static void bubbleSort(int[] numbers)
{
int temp;
for (int i = (numbers.length - 1); i >= 0; i--)
{
for (int j = 1; j <= i; j++)
{
if (numbers[j-1] > numbers[j])
{
temp = numbers[j-1];
numbers[j-1] = numbers[j];
numbers[j] = temp;
}
}
}
}
Håber i kan se hvad jeg mener :D
