(复习笔记)java基本数据类型

(复习笔记)java基本数据类型

flowchart LR java("java数据类型") pri("基本数据类型") ref("引用数据类型") java-->pri java-->ref digit("数值型") bool>"布尔型,boolean,1bit,true/false"] string("字符型") pri-->digit pri-->string pri-->bool int0("整型") float0("浮点型") digit-->int0 digit-->float0 byte>"byte,1个字节"] short>"short,2个字节"] int>"int,4个字节"] long>"long,8个字节"] int0-->byte int0-->short int0-->int int0-->long float>"float,4个字节"] double>"double,8个字节"] float0-->float float0-->double char>"char,2个字节"] str["String,字符串"] string-->char char .->str clazz>"class类"] interface>"interface接口"] array>"array数组"] ref-->clazz ref-->interface ref-->array classDef class1 fill:lightblue classDef class2 fill:lightgreen class byte,short,int,long,float,double,char,bool class1 class clazz,interface,array class2

浮点类型问题

浮点类型数据存在舍入损失问题,导致它们并不严谨,比如在判断两个浮点数据是否相等时,可能得到错误的结果。

		float f1 = 0.1f;
		double f2 = 1/10d;
		System.out.println("f1 = "+f1);
		System.out.println("f2 = "+f2);
		System.out.println("f1=?f2:"+(f1==f2));
/*
		输出结果是:
		f1 = 0.1
		f2 = 0.1
		f1=?f2:false
*/

又比如:

        float f1 = 1000000000000f;
        float f2 = f1 + 1;
        System.out.println("f1 = "+f1);
        System.out.println("f2 = "+f2);
        System.out.println("f1=?f2:"+(f1==f2));
/*
		输出结果是:
		f1 = 1.0E12
		f2 = 1.0E12
		f1=?f2:true
*/

因此,在需要严谨进行浮点数据处理时,不能够直接使用java的浮点数据类型。不过有替代方法,比如使用BigDecimal;

字符串常量和字符串类String的引用

        String str1 = "123";
        String str2 = "123";
        System.out.println("str1=?str2: "+(str1==str2));
        String str3 = new String("333");
        String str4 = new String("333");
        System.out.println("str3=?str4: "+(str3==str4));
/*
		输出结果为:
		str1=?str2: true
		str3=?str4: false
*/

其实这里比较的并不是字符串里的内容是否相同,而是字符串类对象引用的内存地址是否相同。

str1和str2,通过这种赋值方式,”123“被存在常量池中。str1和str2都引用了这个被存在常量池中的”123“,所以它们的引用地址相同,因此str1==str2结果为true。

而str3和str4,由于它们是通过new创建的,是两个不同的新对象,因此一般分别引用了两块不同的内存空间,所以str3==str4结果为false。但是,有说法是,有的JVM版本可能会出现true,如果该版本JVM因为字符串比较短而进行了优化,将传入的参数"333"放进了常量池,那么这两个new出来的对象可能也会引用同一块地址空间,不过作为新手,我并未见过这种情况。

posted @ 2024-06-29 16:59  fistar  阅读(20)  评论(0)    收藏  举报