【问题标题】:Why is this Java code returning a memory address? [duplicate]为什么这个 Java 代码返回一个内存地址? [复制]
【发布时间】:2019-01-15 22:50:45
【问题描述】:

此代码返回由 rgb2hsv 函数返回的数组的内存地址。我不确定为什么会这样,或者它是否甚至是它正在返回的内存地址,因为我熟悉内存地址,看起来类似于“0x038987086”,但代码返回的东西看起来更像这样: “[F@12bb4df8”,我不确定为什么会这样,如果你能回答为什么以及它返回的究竟是什么,那将是非常有益的。 代码如下:

  public class HelloWorld{
     public static float max(float[] nums) {
        if (nums[0] > nums [1] && nums[0] > nums[2]) {
            return nums[0];
        }
        if (nums[1] > nums [0] && nums[1] > nums[2]) {
            return nums[1];
        }
        if (nums[2] > nums[0] && nums[2] > nums[1]) {
            return nums[2];
        }
        return 0;
        }
     public static float min(float[] nums) {
        if (nums[0] < nums [1] && nums[0] < nums[2]) {
        return nums[0];
        }
        if (nums[1] < nums [0] && nums[1]  < nums[2]) {
        return nums[1];
        }
        if (nums[2] < nums[0] && nums[2] < nums[1]) {
            return nums[2];
        }
        return 0; 
     }
     public static float[] rgb2hsv(float r,float g, float b) {
         float h;
         //Initializes h
         h=0;
         float s;
         float v;
         // Floats added to avoid operator precedence
         float x;
         float a;
         float hue;
         //Divides by 255 
         r=r/255;
         g=g/255;
         b=b/255;
         float[] rgbArray = {r,g,b};
         float mx= max(rgbArray);
         float mn= min(rgbArray);
         float df= mx-mn;
         if (mx == mn) {
            h=0; 
         }
         if (mx==r) {
            x=g-b;
            a=x/df+360;
            hue=a % 360;
            h=hue;
         }
         if (mx==g) {
        x=b-r;
        a=x/df+120;
        hue=a % 360;
        h=hue;
     }
     if (mx==b) {
        x=r-g;
        a=x/df+240;
        hue=a % 360;
        h=hue;
     }

     if(mx==0) {
         s=0;
     }
     else {
         s=df/mx;
     }
     v=mx;
     float[] hsvArray = {h,s,v};
     return hsvArray;
 }
 public static void main(String []args){
 float[] x=rgb2hsv(255, 255, 0);
 System.out.println(x);
 }

}

这应该输出 3 个不同的数字,告诉我色调、值和饱和度。相反,它返回类似于“[F@12bb4df8”

【问题讨论】:

    标签: java arrays rgb hsv


    【解决方案1】:

    这是数组的toString。请参阅Object.toString,它会告诉您默认实现返回的等价于

    getClass().getName() + '@' + Integer.toHexString(hashCode())
    

    Class.getName 解释了它的作用。

    Object.hashCode 会告诉你更多关于这个号码的信息。通常它将从第一次调用时对象的内存地址派生。它可能不是实际的内存地址,因为低位通常为零,并且 JVM 倾向于在内存中移动对象作为垃圾回收的一部分。

    静态方法java.util.Arrays.toStringdeepToString 会给你一些更明智的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2015-11-02
      • 2014-01-22
      相关资源
      最近更新 更多