I know that Double is a a wrapper class, and it wraps double number. Today, I have seen another main difference :
double a = 1.0;
double b = 1.0;
Double c = 1.0;
Double d = 1.0;
System.out.println(a == b); // true
System.out.println(c == d); // false
So strange with me !!!
So, if we use Double, each time, we must do something like this :
private static final double delta = 0.0001;
System.out.println(Math.abs(c-d) < delta);
I cannot explain why Double make directly comparison wrong. Please explain for me.
canddare technically two different objects and==operator compares only references.is better as it compares values, not references. But still not ideal. Comparing floating-point values directly should always take some error (epsilon) into account (
Math.abs(c - d) < epsilon).Note that:
here comparison would yield
true, but that’s more complicated (Integerinternal caching, described in JavaDoc ofInteger.valueOf()):Why
valueOf()? Because this method is implicitly used to implement autoboxing:See also