簡而言之,我將一個參數傳遞給一個方法,將該方法的輸出分配給一個不同的變量,並稍後引用原始參數,僅發現它的值已更改!Android:Java方法調用更改輸入參數
這裏我有創建原始變量的主要片段的相關部分。這是logtag是QF:
Log.d("QF",""+ roiRGB[0]);
double[] lab = MathUtils.rgbTOlab(roiRGB, refRGB);
Log.d("QF",""+ roiRGB[0]);
在MathUtils,rgbTOlab看起來是這樣的:
public static double[] rgbTOlab(double[] roi, double[] ref){
double[] newroi = roi;
Log.d("rgbTOlab", roi[0] + " vs " + newroi[0]);
newroi = rgbTOxyz(newroi);
Log.d("rgbTOlab", roi[0] + " vs " + newroi[0]);
...
而且rgbTOxyz看起來是這樣的:
public static double[] rgbTOxyz(double[] rgb)
{ // RGB input values must be normalized to 0..1
Log.d("rgbTOxyz",rgb[0]+"");
double[] newrgb = rgb;
Log.d("rgbTOxyz",rgb[0]+ " vs " + newrgb[0]);
// Convert RGB values to sRGB ("standard" RGB)
for (int i=0;i<3;i++) {
if (rgb[i] <= 0.04045) {
rgb[i] = rgb[i]/12.92;
} else {
rgb[i] = Math.pow((rgb[i] + 0.055)/1.055, 2.4);
}
rgb[i] = rgb[i] * 100;
}
Log.d("rgbTOxyz",rgb[0]+" vs " + newrgb[0]);
...
而這裏的logcat的:
05-28 19:42:29.961 D/QF﹕ 0.16626617647060205
05-28 19:42:29.962 D/rgbTOlab﹕ 0.16626617647060205 vs 0.16626617647060205
05-28 19:42:29.962 D/rgbTOxyz﹕ 0.16626617647060205
05-28 19:42:29.962 D/rgbTOxyz﹕ 0.16626617647060205 vs 0.16626617647060205
05-28 19:42:29.962 D/rgbTOxyz﹕ 2.354995989041693 vs 2.354995989041693
05-28 19:42:29.962 D/rgbTOlab﹕ 2.354995989041693 vs 2.036417989802886
05-28 19:42:29.962 D/QF﹕ 2.354995989041693
rgb [0] s的值我永遠不會改變,我需要它在方法調用之前和之後都是一樣的。然而,顯然,即使我從不操縱它或將其返回,最初的觀點也正在發生變化。關於爲什麼會發生這種情況的任何想法,以及我如何解決它?我完全失去了,非常感謝任何幫助。
你是不是想要克隆'roi'? 'double [] newroi = roi'聲明對double []的引用,並初始化它指向與'roi'指向的相同數組。 –