JAVASE(04数据类型)

前言

JAVA是一种强类型语言,这意味着必须为每一个变量声明一种类型。

在这里插入图片描述

一. 8种基本类型

在Java中,一共有8种基本类型,其中包括4种整型、2种浮点型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。

1.整型

整型用于表示没有小数的数值,允许是负数。
Java一共有四种整型:
在这里插入图片描述
注:
【1】长整型数值有一个后缀L,十六进制数值有一个前缀0x,八进制数值有一个前缀0
【2】Java中没有无符号类型,每个类型都有正负符号
【3】byte类型范围:-128到+127

步骤:
1.最大正数是01111111,,即127
2.最大的负数是11111111,即-1 2、10000000是最小负数的补码表示形式:
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补
=[10000000]原
3.-1-127的结果应该是-128, 在用补码运算 的结果中, [1000 0000]补 就是-128 .可以理解成-128的补码10000000的最高位与符号位重合

2.浮点型

浮点型用于表示有小数部分的数值,同样有正负之分。在Java中有两种浮点类型:在这里插入图片描述
double表示这种类型的数值精度是float类型的两倍(称为双精度型)。绝大部分应用程序都采用double类型。
注:
【1】float类型的数值有一个后缀F(例如,3.141F)。没有F后缀的浮点类型数值(例如,3.141)默认为double类型。也可以在浮点数值后面添加后缀D(例如,3.141D)。
【2】二进制系统中无法精确的表示0.1,就好像十进制不能表示1/3一样
0.1转二进制不能表示的原因:

0.1×2=0.2 …0
0.2×2=0.4 …0
0.4×2=0.8 …0
0.8×2=1.6…1
0.6×2=1.2…1
0.2×2=0.4…0

是无限循环的

3. char类型

char类型用于表示单个字符。通常用来表示字符常量。
例如,'A’是编码为65所对应的字符常量。与“A”不同,“A”是一个包含字符A的字符串

特殊字符的转义字符序列
在这里插入图片描述
注:(1)UTF-16编码采用不同长度的编码表示所有Unicode代码点
(2)除非需要对Unicode代码单元进行操作,不要用char类型,最好将需要处理的字符串用抽象数据类型表示

4.boolean类型

boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。整数值和布尔值之间不能进行相互转换。
注:在C++中,数值或指针可以代替boolean值,整数0相当于布尔值false,非0值相当于布尔值true,Java则不行

二. 类型转换

在程序运行时,经常需要把一种数值类型转换为另一种数值类型。包括自动(隐式)类型转换和强制类型转换。

1.自动类型转换

自动类型转换不会导致数据的丢失。下图给出了数值类型之间的合法转换:
在这里插入图片描述
在图中有6个实心箭头,表示无信息丢失的转换,有三个虚箭头,表示可能有精度损失的转换。
例如,123 456 789是一个大整数,它所包含的位数9比float类型所能够表达的有效位数(6-7)多。当将这个整型数值转换为float类型时,将会得到同样大小的结果,但却失去了一定的精度,失真。

int n=123456789;
float f=n; // f is 1.23456792E8

当使用上面两个数值进行二元操作时(例如,n+f),先将两个操作数转换为同一种类型,即转换成float类型,然后进行计算。

2.强制类型转换

  • 在Java中,允许进行这种数值之间的类型转换。当然,有可能丢失一些信息。在这种情况下,可以通过强制类型转换实现这个操作。

  • 强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。

例如:

double a=3.141;
int x=(int)a;

这样,变量x的值为3。强制类型转换通过截断小数部分将浮点型转换为整型。

注:如果试图将一个数值从一种类型强制为另一种类型,而又超出了目标类型的表示范围,结果就会截断为一个完全不同的值。

例1:

public class test {
	public static void main(String[] args) {
		byte a = 127 ;
		a = (byte)(a+3) ;
		System.out.println(a);
	}
}

输出-126

输出结果由java编码方式决定的,Java中正数用原码表示,负数用补码表示,第一位是符号位。
127的编码是其原码:

0000 0000 0000 0000 0000 0000 0111 1111

127+3=130,130的编码是:

0000 0000 0000 0000 0000 0000 1000 0010

强制转换:

1000 0010

java第一位为1的为负数。负数用补码表示,所以要显示原码,要取反加1:得 0111 1110
126加上符号位:

得-126

例2:

public class test {
	public static void main(String[] args) {
		short a = 128 ;
		byte b = (byte)a ;
		System.out.println(b);
	}
}

输出-128

128的编码是其原码:

0000 0000 1000 0000

强制转换:

1000 0000

由于java第一位为1的为负数,负数用补码表示,所以要显示原码,要取反加1:得1000 0000
128加上符号位:

得-128

例3:

public class test {
	public static void main(String[] args) {
		byte a = (byte)(-129) ;
		System.out.println(a);
	}
}

输出127

-129的原码是:

1000 0000 0000 0000 0000 0000 1000 0001

(负数用补码表示)-129的补码是:

0111 1111 1111 1111 1111 1111 0111 1111

强制转换:

0111 1111

第一位为0的为正数,正数用原码表示,直接计算

得127

三. 引用类型

引用类型

猜你喜欢

转载自blog.csdn.net/wangzijunn/article/details/104771497
今日推荐