Double.parseDouble(list.get(i).toString()) 和 list.get(i) 如果列表是数组列表 <Double> 之间有区别吗

Is there a difference between Double.parseDouble(list.get(i).toString()) and list.get(i) if list is an arraylist<Double>

我有两个像这样创建的双精度数组列表:

ArrayList <Double> axis_x = new ArrayList<Double>();
ArrayList <Double> axis_y = new ArrayList<Double>();

现在,我在使用时看到了计算上的差异(因为我想简化计算)

for(int j=0; j<axis_x.size();j++) {
    double ax_x = Double.parseDouble(axis_x.get(j).toString()) + Math.abs(left_scale);
    axis_x.set(j,ax_x);//axis_y.get(i);
    double ax_y=0.0f;
    if(Double.parseDouble(axis_y.get(j).toString()) < 0.0f) {
        ax_y = Math.abs(Double.parseDouble(axis_y.get(j).toString())) + Math.abs(up_scale);
    }else if(Double.parseDouble(axis_y.get(j).toString()) > 0.0f) {
        ax_y = Math.abs(Double.parseDouble(axis_y.get(j).toString()) - Math.abs(up_scale));
    }else if(Double.parseDouble(axis_y.get(j).toString()) == 0.0f) {
        ax_y = Math.abs(up_scale);
    }
    axis_y.set(j,ax_y);
}

VS

for(int j=0; j<axis_x.size();j++) {
    double ax_x = axis_x.get(j) + Math.abs(left_scale);
    axis_x.set(j,ax_x);
    double ax_y=0.0f;
    if(axis_y.get(j) < 0.0f) {
        ax_y = Math.abs(axis_y.get(j)) + Math.abs(up_scale);
    }else if(axis_y.get(j) > 0.0f) {
        ax_y = Math.abs(axis_y.get(j)) - Math.abs(up_scale);
    }else if(axis_y.get(j) == 0.0f) {
        ax_y = Math.abs(up_scale);
    }
    axis_y.set(j,ax_y);
}

知道axis_y.get(i)应该是double,难道Double.parseDouble(axis_y.get(j).toString())axis_y.get(i)不一样吗?我在这里遗漏了什么吗?

请参阅上述两种获取 Double 物品的方法:

final ArrayList<Double> axis_x = new ArrayList<Double>();

// Way #1. Getting the Double item from the `List<Double>`
//   without performing any conversions.
final int i = 0;
final Double x = axis_x.get(i);

// Way #2. Getting the Double item from the `List<Double>`
//   with performing two redundant conversions.
final Double x =
    // `String => Double` conversion.
    Double.parseDouble(
        // `Double => String` conversion.
        axis_x.get(i).toString()
    );

应该使用方法 #1 直接获取项目,即不执行任何转换。

方法 #2 使用了两个冗余转换:Double => StringString => Double
因此,应该避免这种方式。

#1: final Double x = axis_x.get(i);

双倍 <= 双倍

#2:final Double x = parseDouble(axis_x.get(i).toString());

双精度 <= 字符串 <= 双精度转换。

方式 2 不是聪明且较短的方式。 方式 1 也是精确值。