That's the problem with the Real number representation in computers: it works till it doesn't
Basically, you're approximating a infinite line by using points, the number gets rounded to the closest point. That's why you have .95=0.9499999999999999555910790149937383830547332763671875
(any number between those 2 will give the same result)
Want to have more fun? Try:
double x1=1000;
double x2=2e19;
System.out.println("x1="+x1);
System.out.println("x2="+x2);
System.out.println("x1+x2-x1="+(x1+x2-x2));
(it's called catastrophic cancellation)