您的位置:首页 > 编程语言 > Java开发

小白Java笔记——数据类型

2017-11-28 18:08 232 查看
一、数据类型分类

之前说过Java是强类型语言,意思是所有的变量必须先声明后使用;指定类型的变量只接受与之匹配类型的值。

声明变量很简单,只要定义变量类型和变量名即可:

type varname[ = 初始值];


说明一下“变量”:编程的本质是对内存中数据的访问和修改。我们需要一种机制来访问或者修改内存中的数据,这种机制就是变量。每个变量都代表某一小块内存。我们对变量赋值就是把数据装入内存。通俗的理解,变量就是一种容器,来装不同类型的数据的。

变量的作用范围:成员变量和局部变量。

定义变量类型可以是Java支持的所有类型。

Java语言支持的类型:基本类型和引用类型

1.基本类型:boolean类型和数值类型(又分为整数型和浮点型)

2.引用类型:类、接口、数组类型和特殊的null类型。指的是对一个对象(包括数组和实例两种)的引用。实际上引用类型就是一个指针,只是Java语言里不再使用指针的说法。

注意:空引用只能被转换成引用类型,不能转换成基本类型,所以不要把null值赋给基本数据类型的变量。



二、基本数据类型

(一)整数

int(-2^31~2^31-1)常用的整数类型,如果未指定类型,默认是int类型,所以有以下几点注意:

//1.下面代码正确,系统会自动把56当成byte类型处理
byte a = 56;
//2.下面代码错误,系统不会把999999999999当成long类型,即使超出int范围,所以出现错误
long bigValue = 999999999999;
//3.下面是正确表示,需要用l或者L强制转换,建议用L方便识别,不与I混淆
long bigvalue2 = 999999999999L;
//4.下面是正确的,在int的表数范围内,直接赋给long变量,Java依然会当成int处理,但是int可以自动类型转换到long类型
long demo = 999999999;


整数值的4种表示方式:十进制、二进制、八进制和十六进制



Java对二进制的支持:

public class IntegerValTest{
public static void main(String[] args){
int binVall = 0b110010100;
byte binVall2 = 0B01101001;
int binVall3 = 0B10000000000000000000000000000011;
System.out.println(binVall);
System.out.println(binVall2);
System.out.println(binVall3);
}
}


//结果是:
404
105
-2147483645


代码中变量binVall3定义的是32位二进制整数时,最高位是符号位:1代表-,0代表+;负数在计算机是以补码形式存在,因此要转换成原码。



联系前面所说:

/*
定义一个8位的二进制整数,数值默认占的是32位(int),因此是正数
只是强制转换的时候换成byte溢出,变成了-23
*/
byte binVal4 = (byte)0b11101001;
/*
定义一个32位的二进制整数,最高位是1,
由于加了L因此转换成long类型,占64位,因此第32位就不是符号位
所以是正数
*/
long binVal5 = 0B10000000000000000000000000000011L;


(二)字符型

字符集的概念:给所有的字符编号组成总和。因为计算机无法保存电影、音乐、字符…..计算机只能保存二进制码,因此需要把他们全都转换成二进制码。因为对于保存字符简单,所以就直接对字符进行编码,当要保存时,就将对应的字符的编号进行二进制的转换即可。

字符型必须用单引号括起来

三种表现形式:1.直接用单个字符表示字符型值,如‘A’、’9’;

2.通过转义符表示特殊字符,如‘\n’;

3.直接使用Unicode值表示字符型值,如‘\uXXXX’



由于计算机保存字符的时候,保存的是对应的编号,所以char的类型可以直接作为整数值来使用,相当于16位的无符号整数,表述范围为0~65535.

public class CharTest{
public static void main(String[] args){

char aChar = 'a';//直接指定单个字符作为字符值,输出就是a
char enterChar = '\t';//使用转义符
char ch = '\u9999';//使用Unicode编码
System.out.println(ch);
char feng = '疯';//定义一个疯字作为字符值
int fengValue = feng;//直接将char变量当成int变量来用
System.out.println(fengValue);
char c = 97;//直接把在char表数范围内的int数值赋给char变量
System.out.println(c);

}

}


结果是:

香
30127
a


Java语言没有提供表示字符串的基本数据类型,而是通过String类表示字符串,需要用双引号括起来。

String s = "沧海月明珠有泪,蓝田玉暖日生烟";


(三)浮点型

类型:float(单精度浮点数,4字节、32位)和double(双精度浮点数,8字节、64位)。

表示的形式:1.十进制形式。如5.12、0.512,必须有一个小数点,否则就当成int类型;

2.科学计数法:5.12e2(就是5.12x10的2次方)。只有浮点类型的数值才能用科学计算方法。

Java语言默认是double类型,如果要当成float类型,则必须加F或f。

三个特殊的浮点数值:正无穷大(POSITIVE_INFINITY)、负无穷大(NAGATIVE_INFINITY)和非数(NaN)。

注意只有浮点数除以0才可以得到正负无穷大,当然非数也适用,否则会出现报错。

具体例子:

public class FloatTest{
public static void main(String[] args){
//观察下面af的变化
float af = 5.2345556f;
double af1 = 5.2345556;
System.out.println(af);
System.out.println(af1);
double a = 0.0;
float af3 = -5.2f;
System.out.println(af/a);//正无穷大
System.out.println(af3/a);//负无穷大
System.out.println(a/a);//非数
System.out.println(0/0);//抛出异常
double c = Double.NEGATIVE_INFINITY;
float d = Float.NEGATIVE_INFINITY;
System.out.println(c==d);//float和double的无穷大相等
System.out.println(a/a==Float.NaN);//两个非数不相等
System.out.println(6.0/0==55.0/0);//所有正无穷大相等,适用于负无穷
}

}


结果:

5.2345557
5.2345556
Infinity
-Infinity
NaN
Exception in thread "main" java.lang.ArithmeticException: / by zero
at FloatTest.main(FloatTest.java:12)
true
false
true


出现的错误:

错误: 不兼容的类型: 从double转换到float可能会有损失
float af1 = 5.2345556;


解决:涉及到下一个知识点类型的转换,详细的以后说,这里修改把float变成double,因为本来就是想定义一个double类型。

(四)数值下面使用下划线分隔

作用:更直观的查看数值多的位数

int binVal = 0B1000_0000_0000_0000_0000_0000_0000_0000;
double pi = 3.14_15_92_65_36;


(五)布尔型

只能用字母表示的true和false,占用8位。

public class BooleanTest{
public static void main(String[] args){

boolean b1 = true;
System.out.println(b1);

String str = true+"";
System.out.println(str);
}
}


结果是true true;

从结果上可以得出啊,虽然说其他基本类型数值不能转换成为boolean型,但字符串”true”和”false”可以间接的通过一个boolean值和字符串进行连接运算,那么boolean值可以转换成字符串。

这里插入一个自己的理解:

如刚才那个 String str = true+”“;

=后面有true是boolean类型的,如果要将自己赋值给前面的String类型的str变量,就不仅要将自己的值还要将自己的类型都转换成与String类型相符的,因此true需要转换成字符串类型才能进行赋值。

控制的流程:

1.if条件控制语句;

2.while循环控制语句;

3.do循环控制语句;

4.for循环控制语句;

5.三目运算符(?:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 数据