回顾JAVA一:认识数据(未完)

1:JAVA有八大数据类型,byte ,short,int long,flout,double,boolen,char,同时每一个比本数据类型都有其对应的包装类型

2:说到了数据类型还有一种就是String,它本身就是一个包装类型,并且没有对应的基本类型,使用它声明为final不可改变,为什么不可改变呢?这里引入一个池的思想,String的不可改变,指的是String池中的value不可改变

通俗的来解释一下,举一个例子吧:

        String str = "a";
        str =  "b";

在这里插入图片描述

我们看似改变了str的值,但是,事实上,内容为"a"的字符串对象并没有改变,只是str指向的对象地址发生了改变。

String的不可变性是如何保证的

JDK源码中,存放String内容的实际上是char数组,这个数组是final类型的,一经初始化就不能改变。

 /** The value is used for character storage. */
    private final char value[];

但是,char数组是引用类型,final类型只能保证value的地址不可变,不能保证value数组的内容不能变化。即完全可以通过以下方式改变value的内容:

final char[] value = {
    
    'a','b','c'};
value[0] = 'd';

所以,重点是字符数组为private访问权限,所以只有SUN的工程师可以拿到这个字符数组。而SUN的工程师在所有方法中都没有改变该字符数组的值。另外,String被定义为Final类型,也防止了通过继承之后破坏不可变性。

3:习题:

int a = 1;
String b = "2";
String c = "3";
System.out.println(a + b + c);

输出的结果应该是:123,因为在我我们的输出中,倘若同时出现int类型和String类型,就会将int转换为String类型,为什么会这样呢?让我们来窥探一下源码:请添加图片描述

按住ctrl+println:我们可以看到这个是Object类型也就是所有类型

请添加图片描述

然后下面有一个valueof,我们同样进入源码,看一下这个valueof:一个三元表达式说明了一切,它会将所有的Object类型转换为String类型,也就是字符串类型,哈哈真相大白

请添加图片描述

下一题:

float f1 = 9.9f;
float f2 = 0.1f;
System.out.println(f1 - f2);

这个最后会输出9.799999

原因是在java中对于运算计算机会转换为二进制进行计算,这里先简单介绍一下小数是怎样转换为二进制的:对小数点以后的数乘以2,有一个结果吧,取结果的整数部分(不是1就是0喽),然后再用小数部分再乘以2,再取结果的整数部分……以此类推,直到小数部分为0或者位数已经够了就OK了。

举一个例子:0.125

演示:

         0.125 ×2=0.25 .......................0

         0.25×2=0.5.............................0

         0.5×2=1.0................................1

即 0.125的二进制表示为小数部分为0.001

 **记住,乘到小数为0。排序:正序。**

所以0.1的计算:

 0.1×2=0.2 .....................0

 0.2×2=0.4 ......................0

 0.4×2=0.8 .....................0

 0.8×2=1.6.......................1

 0.6×2=1.2.......................1

 0.2×2=0.4.......................0

 .....

最后是无限循环的,也就是0.00011 00011 00011 … …

9.9的二进制就是:拆分为9和0.9,9的二进制为:1001,0.9的二进制:

0.9×2=1.8.....................1
0.8×2=1.6.....................1
0.6×2=1.2.....................1

到这里我们发现又来了与上面类似的无限循环,所以9.9的二进制:1001.111 0011 0011 0011 … …

两者都是无限循环小数,所以答案也是无限循环的9.799999…

《On java 8》阅读:

猜你喜欢

转载自blog.csdn.net/justleavel/article/details/121341236