java基本数据类型就8种,记住就好了。除了这些都是引用型的了。
java四类八种基本数据类型
第一类:整型 byte short int long
第二类:浮点型 float double
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char
在栈中可以直接分配内存的数据是基本数据类型。
引用数据类型:是数据的引用在栈中,但是他的对象在堆中。
要想学好Java必须知道各种数据的在内存中存储位置。
对内存有了很好的了解,可以有助你分析程序。
字节:
boolean 布尔型 1/8
byte 字节类型 1
char 字符型 2 一个字符能存储一个中文汉字
short 短整型 2
int 整数类型 4
float 浮点类型(单精度) 4
long 长整形 8
double 双精度类型(双精度) 8
java中默认的整数类型是int类型,如果要定义为float型,则要在数值后加上l或L;
默认的浮点型也是双精度浮点,如果要定义为float型,则要在数值后加上f或F。
一个字节等于8位,一个字节等于256个数,就是-128到127一共256。
kB就是kBytes
Bytes就是“字节”的意思!
K就是千的意思,因为计算机是通过二进制来计算,10个1正好是1024
1111111111(二进制)=1024(十进制)
1Bytes(字节)=8bit(比特)
一个英文字母或一个阿拉伯数字就是一个字符,占用一个字节
一个汉字就是两个字符,占用两个字节。
一般讲大小是用Bytes,大写的“B”,讲网络速率是用bit,注意是小写的“b”。
例:一个文件有8MBytes
例:我下载文件的速率是256KB/s,即2Mbit,这通常就是我们宽带上网的速率。
基本数据类型自动转换,记住:小可转大,大转小会失去精度!!!
精度由小到大自由转换,由大到小强制转换
(1)布尔型和其它基本数据类型之间不能相互转换;
(2)byte型可以转换为short、int、、long、float和double;
(3)short可转换为int、long、float和double;
(4)char可转换为int、long、float和double;
(5)int可转换为long、float和double;
(6)long可转换为float和double;
(7)float可转换为double;
Integer可以为null,int不能为null,拆箱过程可能空指针。
Byte、Short、Integer、Long、Char的装箱类范围-128<=x<128是放在常量池的。
自动装箱:Integer x = Integer.valueOf(34);
自动拆箱:int y = x.intValue();
强制转换的只是引用而不是对象。
引用类型的强制转换,转换的仅仅是引用的名义类型。
基本类型的强制转换,涉及到了数据的变化,有可能发生精度丢失的情况,那就转换不回来了。
当然基本类型转到到Object是一个自动装箱的过程,那倒是不会发生精度丢失,也可以转换回去。
==和!=比较的是引用对象的堆地址,基本数据对象的栈地址,比较只能用==和!=;
equals比较的是引用的栈地址,即内容,重写equals方法比较具体内容。
比较两个对象的实际内容使用equals,
1、String 创建的是字符串常量。(表达式创建对象,在缓冲池寻找相同值得对象,都指向同一对象。)
2、用new String() 创建的字符串不是常量,不能在编译期就确定,在堆中重新分配内存地址,栈的引用就不相同。
所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间
String str1 = “ABC”;可能创建一个或者不创建对象,如果”ABC”这个字符串在java String池里不存在,会在java String池里创建一个创建一个String对象(“ABC”),然后str1指向这个内存地址,无论以后用这种方式创建多少个值为”ABC”的字符串对象,始终只有一个内存地址被分配,之后的都是String的拷贝,Java中称为“字符串驻留”,所有的字符串常量都会在编译之后自动地驻留。
String str2 = new String(“ABC”);至少创建一个对象,也可能两个。因为用到new关键字,肯定会在heap中创建一个str2的String对象,它的value是“ABC”。同时如果这个字符串再java String池里不存在,会在java池里创建这个String对象“ABC”。