Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。
1.整形:byte,shout,int,long(默认值为0)
(1) 在java中,任何一个整形常量均为int型!
(2) 整形常量若要声明为long类型,需要在数字后加上l或者L(推荐)
(3)在进行整型数据操作的过程之中也会存在数据溢出问题,指的是当已经达到了整型的最大最小值继续进行数学
如
int maxValue = Integer.MAX_VALUE;
int minValue = Integer.MIN_VALUE;
System.out.println(maxValue+1);
System.out.println(minValue-1);
int型既然存在数据溢出问题,解决方案只有一个:更换数据类型
使用long来解决数据溢出问题:(所有程序的执行顺序是从右边到左边)
解决方法如下:
long num = maxValue + 1L;
long num = 2147483648L("l"或者"L")都可以
(滴滴笔试题) System.out.println(11+1l);
(4)Java中小的数据类型与大的数据类型做数值运算时,小的数据类型会自动提升为大的数据类型。
eg:10+1L;
(5)数据范围大的数据类型只有强制转换才能转为数据类型小的数据类型,强转可能会丢失数据
long longA = 32L;//大类型
int intA =(int)longA;//小类型 强制类型转换,大类型前加括号
(6)long一般用于描述日期、时间、内存、文件大小
(7)如果要进行编码转换或者进行二进制流的操作,使用byte(-127~128)
( 8) char一般在描述中文中会用到(基本忽略)
这里必须注意: byte与int(byte类型保存的范围是:-128~127)
a、整形常量若在byte类型的保存范围之内,可以直接赋值给byte变量,无需强转;
特殊情况,在-128~~127之间,不报错直接编译,超过就会报错
b、若整形常量值超出byte范围,必须强转;整形变量无论值是否在byte范围内,都需要强转。
输出:byte data = (byte)300
结果:44
计算过程:
cmd--》ccalc打开程序员计算器
300的二进制0001 0010 1100 byte占8位1个字节 0010 1100十进制44
超过这个范围,如果要将int变量赋值给byte类型,必须强转
2.浮点型:float,double(默认值0.0)
(1)在JAVA中所有小数都默认double型,如果想要某一个小数是float型,只需要在小数后面加一个F或f,一般加F,便于区分。
int a =1
float f=1.0F;//1.0 double F
double d=2.0D;//D d
long lon=230L;//L l
(2)double可以保存的数字是最大的。
float保存范围小于double,如果要使用float,必须强制类型转换,在小数后加"F"或者"f"
例:
public static void main(String [] args){
int a =1;
float f=1.0F;(在这里必须加一个大写的F ,如果不跟,默认为double类型,就需要数据类型转换,编译通过不了)
3.字符型
字符型使用char来表示,并且使用' '来表示字符变量内容,并且可以与int相互转换
char一般用于描述中文(默认值\u0000)
大写字母(A~Z):65(A)~90(Z)
小写字母(a~z):97(a)~122(z)
int型转为char型需要强制类型转
例:
实现大写字母变小写字母(差32个长度)
char c = 'A'
int num = c + 32 ; // char+int=int ;
char x = (char) num ; // int转char需要强转
System.out.println(x) ;
注意:字符型数字('0'~'9')与int数字(0~9)不同 if('0'== 0)一定是false
4.布尔型
boolean(默认值false)
在其他语言中,没有提供布尔类型,因此用'0'表示false,非0表示true。但在java中没有这样的概念
5.大引用类型
数组、类、接口(默认值都为mull)
重要说明:
默认值为声明而未赋值的变量,数据类型默认值需要结合类来观察,主方法中变量必须先赋值再使用,不存在默认值
数值型
如:
int intB;//0
System.out.println(intB);
编译结果:一个错误,尚未初始化
原因:基本数据类型 必须在类中使用 作为属性