1、基本数据类型(四类八种)
(1)整型:
byte(字节)——1个字节,(-27~27-1)-128~127
注意:
1KB(千字节)= 1024B(字节)
1B = 8Bit(位)

byte b = 1+2;
System.out.println(b); //3

注意:如果能够直接计算出值,那么在编译时就编译为b = 3; 所以这里不会报错。

short(短整型)——2个字节,(-215~215-1)-32768~32767

int(整型)——4个字节,-2147483647 ~ +2147483647(21亿)
注意:
①整数直接量默认为int类型,但不能超出范围,若超出范围则编译错误;
②两个整数相除,结果还是整数,小数位无条件舍弃(不会四舍五入);
③整数运算时若超出范围则会发生溢出。

//int a = 1000000000; //编译错误(直接量超出范围)
//int b = 1000000000*10; //溢出(运算超出范围)

直接量:直接写出来的数,比如5、3.14,true
整数直接量:直接写出来的整数,可以是其他进制,比如250,5,0x13(十六进制以0X或者0x开头,八进制以0开头)

long(长整型)——8个字节,-263~262-1
注意:
①长整形直接量需要在数字后面加l或者L
②运算时可能会溢出,建议在第一个数字加L

long a = 5L*20亿;
long b = 2*20亿*5L; //溢出,前面两个int型相乘溢出

(2)浮点型:
float(单精度)——4个字节,-e38~e38

float f = 'a';
System.out.println(f); //97.0
byte c = 'A';
System.out.println(c); //65

注意:如果将字符型直接赋值给整型(int\tybe\short\long)、浮点型(double\float),那么将会转换为ASCII码赋值。

double(双精度)——8个字节,-e308~e308
①浮点数(小数)直接量默认为double型,若想表示float,则需在数字后加f或者F
②double和float数据参与运算时,可能会产生舍入误差(后续解决)。

double m=3.0,n=2.9;
System.out.println(m-n); //0.1000000000009,损失精度

(3)布尔型:
boolean(布尔)——1个字节,true/false

(4)字符型:
char(字符)——2个字节,0~65535
注意:
①采用Unicode字符集编码格式,每个字符都有一个对应的码,表现形式是字符char,但本质上是码(0~65535之间)(Unicode:统一码、万国码、通用码,世界级通用的定长(16位)字符集,包含多个子集,Java的char采用的是最通用的一个子集。
ASCII码:'A’——65 'a’——97 '0’——48 );
char可以使用UTF-16来编码,比如char c=‘\ua4f3’;
②字符型直接量必须放在单引号中,只能放一个;
③特殊符号需要通过\(转义符)来转义。

转义字符:

bytea 类型对应java 什么类型_赋值

‘\t’表示空格,解决水平对齐,九九乘法表是使用

char ch = '\’';
//char c4 = 女; //编译错误,未加单引号
//char c6 = ''; //编译错误,必须有字符
//char c7 = 'abc'; //编译错误,仅能装一个字符

char f = 'A';
//char f1 = f+1; //编译报错
char f2 = (char)(f+1);
System.out.println(f2); //B
char f3 = 'A'+1;
System.out.println(f3); //B

2、引用类型类型(数组、类、接口)
String——字符串型,比如:”字符串型”,双引号,多个字符组成

特殊之处:与int、double不一样

Scanner sc = new Scanner(System.in);
String name = sc.nextLine();

编码:把文字转换成底层数字的过程;
转换规则:码表,比如
ASCII码(0127,占1个字节)→ISO8859-1(西欧码表,0255,占一个字节)GB2312(简体中文,占2个字节)→GBK(国标码,占2个字节)→Unicode编码体系:
UTF-8,占3个字节
UTF-16,占2个字节

3、类型转换
类型从小到大依次为:自动转换(类型提升)
byte\short(char)\int\long\float\double

(1)两种方式:
①自动(隐式)类型转换:小类型到大类型;
②强制类型转换:大类型到小类型,可能会溢出,可能会丢失精度。

//float f = 1.1; //错误,1.1默认为double
//int i = 4L; //错误,long无法自动转换为int
long a = 4990; //正确,4990int自动转换为long
char b = 65; //正确,65为ASCII码

long a1 = 10000000000L;
int a2 = (int)a1;
System.out.println(a2); //1410065408,强制转换可能发生溢出
double a3 = 56.66;
int a4 = (int)a3;
System.out.println(a4); //56,强制转换可能丢失精度

(2)三点规则:
①整数直接量可以直接赋值给byte、short、char,但不能超过范围;
②byte、short、char型数据参与运算时,系统将其先一律转为int类型,再计算;
③++ / – 以及 赋值运算符 参与运算,数据类型是不受影响的(底层默认强制类型转换)。

byte a = 9;
byte b = 2;
a++;
b += a;
int d = 65;
char d1 = (char)d;

byte m1 = 5;
byte m2 = 6;
//byte m3 = m1+m2; //编译错误,m1、m2相加自动转为int型,int型无法直接赋值给type型
byte m3 = (byte)(m1+m2);

//常见笔试题

short s = 5;
s += 10; //不报错,相当于s=(short)(s+10)
//s = s+10; //编译错误,s+10需要将s转为int型,int型与int型相加,然后赋值给short就会发生错误,这里需要强转。