Java教程

java基础:基本类型

本文主要是介绍java基础:基本类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

java基本类型(八大基础类型)

八大基本类型如下
byte
boolean
char
int
short
long
float
double

下面具体介绍各个类型:

1、booelan(布尔类型)

布尔类型占1个字节(8位),它的的值必须是true或者false,在JVM中会转换为1(true)或者0(false)。

2、char(字符类型)

char(字符类型)
char类型占2个字节(16位),用来表示字符,是基本数据类型
String表示字符串,是类类型。一个String是由0~n个char组成。

额外:关于字符编码

(1)Java语言对文本字符采用Unicode编码。由于计算机内存只能存取二进制数据,因此必须为各个字符进行编码。
(2)常见编码:
1、ASCII
它是现今最通用的单字节编码系统,它主用于表达现代英语和其他西欧语言中的字符,只用一个字节的7位,一共表示128个字符。

2、ISO-8859-1
又称为Latin-1, 是国际标准化组织(ISO)为西欧语言中的字符制定的编码,用一个字节(8位)来为字符编码,与ASCII字符编码兼容。所谓兼容,是指对于相同的字符,它的ASCII字符编码和ISO-8859-1字符编码相同。

3、GB2312
包括对简体中文字符的编码,一共收录了7445个字符(6763个汉字+682个其他字符). 它与ASCII字符编码兼容。

4、GBK
对GB2312字符编码的扩展,收录了21886个字符(21003个字符+其它字符), 它与GB2312字符编码兼容。

5、Unicode
收录了全世界所有语言文字中的字符,是一种跨平台的字符编码,Unicode具有两种编码方案:
用2个字节(16位)编码,被称为UCS-2, Java语言采用;
用4个字节(32位)编码,被称为UCS-4;

6、UTF
有些操作系统不完全支持16位或32位的Unicode编码,UTF(UCS Transformation Format)字符编码能够把Unicode编码转换为操作系统支持的编码,常见的UTF字符编码包括UTF-8、UTF-16、UTF-32


关于UTF-8,使用一至四个字节为每个字符编码,其中大部分汉字采用三个字节编码少量不常用汉字采用四个字节编码。因为 UTF-8 是可变长度的编码方式,相对于 Unicode 编码可以减少存储占用的空间所以被广泛使用

关于char类型的值
字符’a’,的表示形式:
二进制数据形式为 :0000 0000 0110 0001
十六进制数据形式为 :0x0061
十进制数据形式为 :97

//使用具体字符来表示a
char c = 'a';
//使用Unicode编码来表示字符a
char c = '\u0061';
//0x开头的数字为十六进制,,使用十六进制表示a
char c = 0x0061;
//使用十进制来表示a
char c = 97;
//0开头的数字为八进制,使用八进制表示a
char c = 0141;
//一个中文汉字就是一个字符
char a = '中';

3、整型

都是用来存整数的。

分类:

类型在内存中占的位数或字节数范围
Byte8位,一个字节-2 ^7~2 ^7-1
short1位,2个字节-2 ^15~2 ^15-1
int32位,4个字节-2 ^31~2 ^31-1
long64位,8个字节-2 ^63~2 ^63-1

在Java语言中,为了区分不同进制的数据,八进制数以“0”开头,十六制以“0x”开头,二进制以“0b”开头

byte b1 = 97; //十进制
byte b2 = 0141;// 八进制
byte b3 = 0x61; //十六进制
byte b4 = 0b01100001; //二进制

//都是97打印出来
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);

1、Byte(字节类型)

(1)计算机中,数据传输大多是以“位”(bit,比特)为单位一位就代表一个0或1(二进制),每8个位(bit)组成一个字节(Byte),所以,1个字节=8位0101代码,例如 0000 0001。
例如,0000 0001 ,表示二进制的数字1,它是1个字节,共8位0101代码组成。

(2)十六进制有0 1 2 3 4 5 6 7 8 9 A B C D E F ,它的范围是0~ 15 ,每4位0101代码可以表示一个十六进制的数字,因为4位表示的最小值是 0000,最大值1111 ,刚好范围是0~15 .

总结:1字节=8位

2、Byte\long\int\short的使用

整数类型的默认类型是int,对于给出一个字面值是99的数据,在没有指明这个数据是什么具体的类型的情况下,那么java默认认为是int类型。

代码一:

byte a = 1;

//编译报错
//a+1中a是byte类型,字面值1没有声明类型,那么默认是int
//byte是8位,int是32位,那么结果是32位的数字
//b只是一个byte类型的变量,那么只能接收8位的数字
//修改为int b = a+1;就可以编译通过
byte b = a+1;

//编译通过
//虽然1+1中的1都是默认的int类型
//但是这个俩个1都是固定的字面值
//编译器可以判断出其结果是否超出了byte表示的范围
//上面例子中a+1不能判断出结果的原因是:a是变量,是有可能发生变化的
byte c = 1+1;


//编译报错
//编译器判断出其结果超出了byte的表示范围(-128~127)
byte d = 1+127;

//编译报错 
/*原因:32位的数据赋值给byte类型的变量,因为使用的1这些都是字面值,默认是int,注意关键点在在最左边的1,编译器不认为是符号位,所以它默认是在前面补了24个0*/
byte e = 0b11111111;

//编译通过
//输出结果为255
//因为1的前面补了24个0
int e = 0b11111111;

//编译通过
//输出结果为-1
//因为这里做了类型强制转换
byte f = (byte)0b11111111;

代码二:

 {
byte a=56;                  //编译通过
byte b=156;                 //编译失败,超出了byte的取值范围 
int c=9999999999;           //编译失败,超出了int的取值范围(10个9)
long d=999999999;           //编译通过,常量在int范围内(9个9),int类型可以自动转成long类型
long e=9999999999;          //编译失败,常量超出int范围,不可以自动转成long类型
long f=9999999999L;         //编译通过,在long类型的范围内(注意数值后面加了个L,表示这是long类型)
Long g=999999999;           //Long不是基本数据类型,不能和int直接转化
}

4、浮点型

表示小数的类型
分类为float和double类型,float的精度为7位有效数字,double的精度为16位有效数字(浮点类型的默认类型是double类型)

声明

//后面加f或者F(必加)
float f = 10.5f;
//后面加d或者D或者不加
double d = 10.5d;

代码:

//编译通过
//字面值1.5默认类型是double
double d = 1.5;
double d = 1.5D;

//编译报错
//字面值1.5默认类型是double
//double和float的精确度不一样
float f = 1.5;

//f2编译通过,因为字面值1的类型是int,可以自动转变为float类型
//f3编译报错,因为字面值1.5的类型是double,float不能转换为double类型。
float f1 = 10.5f;
float f2 = f1+1;
float f3 = f1+1.5;

浮点型的数据精度丢失
例如:

System.out.println(1.0-0.66);  //输出结果: 0.33999999999999997

Java中的浮点数类型float和double不能够进行精确运算,虽然大多数情况下是运行是正常的,但是偶尔会出现如上所示的问题。浮点数实际上只是个近似值,所以从二进制转化为十进制浮点数时,精度容易丢失,导致精度下降。

解决?可以使用BigDecimal类

//add方法 +
//subtract方法 -
//multiply方法 *
//divide方法 
BigDecimal d1 = BigDecimal.valueOf(1.0);
BigDecimal d2 = BigDecimal.valueOf(0.66);
double result = d1.subtract(d2).doubleValue();
System.out.println(result);   
//输出结果:0.34
这篇关于java基础:基本类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!