java中基本数据类型主要有:整型,浮点型,字符型,布尔型
整型数据类型中又可以分为以下几种类型:
1.Byte型
这个类型的变量在内存中主要占1个字节的大小,它的取值范围是(-2^7~2^7 - 1 ---> -128~127)。
但是在使用Byte类型的数据时通常要注意这个数是不是超过了上面的取值范围,如果在取值范围内的话,Byte型变量可直接将其打印出来,但是如果没有在范围内的话。从2进制位来看,系统只会自动保留第一个字节的8个bit位上的数据,剩下的会被省略掉。具体的情况如下面程序所示。
这种情况因为计算机默认数据类型为int型,而整型100又在byte类型的取值范围内,所以会正常显示出来,最终b的结果也是100
总结一下大致意思是300这个整型值已经超过了Byte类型的取值范围,这时候系统显示b1的值已经是强转之后的了(也是取从左网往右第一个比特位的8个数,从二进制角度看),最后的显示结果是44。这里有一个强转的大致用法,上面程序中的值必须要进过强转之后才能显示出来。如果不强转程序会报错无法运行,但是强转一定强调的是取值范围大的像取值范围小的转化。
上面程序的值最终结果是-56,原因同上都涉及到了强转,最后结果是被阉割过得数据。这里要注意一下如果出现b4=b2+100,这种Byte变量运算的话,也必须强转。如果不强转系统会认为b2变量的值不确定在取值范围内还好,不强转也会得到结果。但若超过取值范围,那么不强转的话程序也会报错,为了整体性这种类型也必须强转。
2.short型(短整型)
short型变量只占2个字节,它的取值范围是 -2^15~2^15 - 1 -32768~32767
因为short型变量取值范围也比int型变量的取值范围要小(4字节大于2字节,放不下整型变量)所以,如上图所示其变量运算时不强转的话程序亦会报错的,强转之后才能正常显示是。
3.int型变量
int型量在程序中一般会用的最多,它也是计算机默认的基本变量。从键盘上输入的数据如果不加以特殊注释的话,一般情况下,计算机都会把它默认成整型变量来处理的。
int型变量在内存中占4个字节,32个bit位。其取值范围是“-2^31~2^31 - 1”。(整型常量默认是int型的)
**关于整型变量特别要注意的是就是它的变量溢出具体如下图所示:
两个整型相加的确没有报错(因为计算机本来默认数据类型是整型),但是这个例子中用到是整型的最大值再加1这时候结果二进制位已经超过了32位,系统会自动把第33位数据阉割掉(去掉只保留32-0位数据)。这个数据转化成二进制之后如图所示。
4.long型变量
long型变量顾名思义就是最长的整型变量,这里的长指的就是取值范围最大的整型数据了。
long变量占8个字节64个比特位,取值范围是-2^63 ~ 2^63 - 1
所以对于超级大的数字 long不够用了。如何解决呢?BigInteger BigDecimal两个去解决
浮点型数据
浮点数分为Float型和Double 型。其中Float型占4个字节,Double型占8个字节。
同样的计算机经常默认类型为Double型,这里也可以理解Double型是float型的大哥,所以它的精度会比float高,建议程序中使用到浮点数时尽量定义成Double型。
字符
字符型又称为char型占两个字节(0~65535十进制),这些数实质上指的就是字符的编号。
那么字符在计算机中是如何存储的呢?下面图很好阐释了原理
自己的理解其实就是计算机先把所有的字符先存储起来,编成一张表。每一个字符都有自己相应的位置。然后给这些位置上在编上号,那么如果要引用时只需要使用它的编号就能很好的使用到这个字符。
许多存储字符的表如:ASCII,GBK,UTF-8。等等因为版本不同所以在使用这些表的时候不一定相同位置的字符常量就一样。这一点得特别注意。
字符的简单用法如代码所示:
class Test03{
public static void main(String[] args){
/*
将一个字符编号给字符变量
那么在打印这字符变量的时候
先去码表中找到编号相对应的字符
然后再打印
*/
char c1=97;
System.out.println(c1);
/*
将一个字符常量给字符变量的时候
那么在打印这个字符变量时 直接打印
无论如何赋值 一旦打印的是字符变量 结果一定是字符
*/
char c2='A';
System.out.println(c2);
/*
必须要记住的几个字符编号
'a' 97
'A' 65
'0' 48
*/
char c3='a';
//字符变量在参与运算时 是以编号身份参加
System.out.println(c3+1);//98 c3后一个字符的编码
System.out.println(c3-1);//98 c3前一个字符的编码
//如何查看'我'这个字符的编码呢?
System.out.println('我'+0);
//'我'后面的字符是啥?
System.out.println((char)('我'+1));
System.out.println((char)('我'+2));
//如何判断一个字符是小写字母嘞?97~97+25
//大写字母?65~65+25
//数字?48~48+9
System.out.println((char)8888888);
//Unicode码表 \\u 指定编码集Unicode
System.out.println('\u0033');
//为什么有时候显示是 '?'
//我们一般用GBK码表或Unicode码表编程
//但是我们的CMD控制台用的是微软的码表 ANSI
//相同位置的字符 前两个表中有 ANSI中就不一定有了
//但是 不管是哪个码表 前面的内容基本是一致的
boolean b1=true;
boolean b2=false;
String s1="哈哈";
String s2="啦啦";
}
}
boolean型
boolean型数据只有两个逻辑值,第一个是true,第二个是false。
关于其大小,在java当中并没有给boolean一个明确的大小,主要和底层虚拟机相关。但是在具体情况下使用时java会给其分配相应的空间大小。例如在变量中使用到boolean型数据时系统给它的大小是一个字节大小。在数组中使用到boolean型变量时,它就被赋予4个字节的大小空间。
引用数据类型:字符串,null,数组,对象
顾名思义从字面意思来看,它们和基本数据类型还是有些差距的,它们的使用的含义应该比基本数据类型丰富的多含义。它们被创建就是因为它们能够解决基本数据类型解决不了的复杂问题。
a.字符串
String 也不存在具体的大小,它的大小是根据字符串的内容而决定的。目前而言,可以像用基本类型一样去使用String类型数据。String其实是java中自带的一个类
b.null
这个东西就是啥也没有,空的。它和0还是有差别的,0代表一个具体数据而null这个东西真的是啥也没有。
变量的定义
第一种类型:数据类型 变量名=常量 eg:int a=8;
第二种类型: 数据类型 变量; 变量=常量; eg:double c c=2.213