1909 字
10 分钟
Java数据类型

Java数据类型#

变量#

  1. 为什么定义变量

    要向内存中存储数据,而数据是能够改变的,可以使用变量来存储数据

  2. 如何定义变量

    语法: 数据类型 变量名 [= 值 ]

    建议在定义变量时为其赋值

3. 如何使用变量
1. 变量要先定义再使用
2. 变量是有作用域的(就是{}),在同一个作用域中变量不能重复定义(定义了变量名相同的变量),当作用域执行结束后,变量就失效
public static void main(String[] args) {
//age的作用域是 main方法
{
int age = 0;
System.out.println(age);
double age = 0;  //错误的
}
{
double age = 0;  //正确的
}
}

常量#

常量的值不能改变

  1. 用final修饰的变量就是常量
  2. 在程序中出现的所有字面量(数字、字符串等)都是常量

Java的数据类型#

数据类型决定了变量能够存储什么数据、变量在内存空间中的长度

  1. 数据类型的分类

    分为基本数据类型和引用数据类型

  2. 基本数据类型(简单数据类型)

基本数据类型#

  1. 整数类型

byte 1字节(8bit) -128 ~ 127

short 2字节(16bit) -2^15 ~ 2^15 -1

int 4字节(32bit) -2^31 ~ 2^31 -1

long 8字节(64bit) -2^63 ~ 2^63 -1

long如果存储不下的,改变数据的单位降低其精度,也可以使用Java的类BigInteger类等

程序中出现的所有整数常量值默认都是int类型

//将int类型的20赋给了int类型的变量age
int age = 20;
  1. 浮点类型

float(单精度): 4字节 -3.048E38 ~ 3.048E38

double(双精度) : 8字节 -1.798E308 ~ 1.798E308

程序中出现的所有浮点常量值默认都是double类型

//3.15是 double类型 赋给double的pi变量
final double pi = 3.14;

在整数的后面可以加L 、在浮点数的后面可以加 f、d

//不能将double的数据赋给float变量
float f = 3.14f;
double d = 3.1423424;
//3000000000000默认是int类型 ,其值超出了int的范围
System.out.println(3000000000000L);
long a = 3000000000000L;
//为什么编译能通过?
//编译器在校验语法时,f是浮点变量,浮点是不精确的
//无法校验数据的范围,只能校验类型
float f = 3.14; //错误
//编译器在校验语法时,b是整数变量,校验10是否在byte范围内
byte b = 10;
  1. 字符类型(char)

java中有字符和字符串,字符串是由字符组成,字符值是用单引号标注,字符串使用双引号标注

所有的字符值都是基于Unicode编码的

char 2字节 (16bit)

字符值的两种写法:

char c = 'a';
//等同于
char c1 = '\u0061';   //unicode中97的字符

字符值除了普通的字符还有转义字符 ,转义字符可以理解为功能字符,例如回车符、换行符、制表符(tab)

\在Java中是转义符

\r 回车符 光标移动到当前行的第一位

\n 换行符 光标移动到下一行 , 键盘的Enter键相当于 \r\n

\t 制表符 相当于tab键,起到二维表格数据对齐的作用

\\ \

//在控制台输出内容:   \a\
System.out.println("\\a\\");
//今后在表示目录字符串时
System.out.println("d:\\lession\\java2601");

\” ”

System.out.println("这两个东西\"相等\"");

\’ ’

  1. 布尔类型(boolean)

boolean类型的值只能是 true和false ;true代表真,false代表假 ;在存储时true存储在1bit中是1 ;falsee存储在1bit中是0

boolean 1字节

boolean经常用来做逻辑上的判断

运算符#

运算表达式 : 含有运算符的表达式,运算表达式都具有结果

算数运算符

+ - * / %(取余,取模) ++ —

++ : 递增运算 变量的值自加1

++i 或 i ++ 都是对i自加1

当要用到自增表达式的结果时,i++ 先取i的值作为自增表达式的结果 ; ++i 先对i自增1在获取i的值作为表达式的结果

int i = 3;
int j = i++;
System.out.println(j);  //3
System.out.println(i);  //4
int i = 3;
System.out.println((i++)+(++i));  //3+5
System.out.println(i);  //5

赋值运算符

= += *= /= %= …

public static void main(String[] args) {
int i = 3;
//赋值表达式的结果就是赋的值
System.out.println(1+2);
//i赋值7,定义一个j变量存储i的值
int j = i = 7;
}
int i = 3;
i+=2;  //i = i + 2;

比较运算符

比较运算表达式的结果一定是boolean类型

== 两边是否相等 > < >= <= != 不等于

逻辑运算符

boolean值参与的运算就是逻辑运算

非运算: ! true的非是false

与运算:&& 理解为自然语言中的 并且 , 只要有false结果就是false ,只有true&&true才是true

或运算: || 理解为自然语言中的 或者 ,只要有true结果就是true,只有false||false才是false

int i = 3;
System.out.println(!(i==4));

位运算符

每一位(bit)都参与的运算 ,通常位运算的效率要高于普通运算

1.按位取反运算 :~ 2.按位左移和右移 : <<左移 >>右移 符号位是不移动的 <<相当于乘2 >>相当于除2

m<<n 相当于 m*2^n

3.移位效率高于乘除

带符号位移动的右移 >>>

//int的最大值
System.out.println(-1>>>1);
//int的最小值
System.out.println(~(-1>>>1));

4.按位与或非

~按位非运算,就是按位取反

&按位与运算,0相当于false;1相当于true

|按位或运算

&&称为短路与运算 如果第一个boolean值(boolean表达式的结果)为false ,后面的表达式就不再执行,结果直接为false ,效率比按位与高

& 按位与运算,两个boolean表达式进行按位&运算,两个表达式都要执行

public static void main(String[] args) {
int i = 3;
/*       System.out.println(i>5&&i++<10);
System.out.println(i); //3 */
System.out.println(i>5&i++<10);
System.out.println(i);  //4
}

5. 按位异或运算

每一位不同的结果是1,相同的结果是0

System.out.println(3^5);  //6

假设a^b=c 那么c^a=b ; c^b = a

实例:交换两个变量的值,用两种写法实现

写法一:

int a = 3;
int b = 4;
int c = a;
a = b;
b = c;
System.out.println(a+","+b);

写法二:

int a = 3;
int b = 4;
a = a^b;
b = a^b;
a = a^b;
System.out.println(a +","+b);

位运算应用总结#

###判断奇偶应用

a&1 == 1 是奇数 ; 如果==0是偶数

取余运算#

a%2^n 等同与 a&(2^n-1)

乘2除2#

a*2^n 等同与 a<<n

平均值运算#

(x+y)/2 是有溢出的风险,使用(x&y)+((x^y)>>1)计算

运算符的优先级

  1. 开头是 括号 ;结尾是赋值
  2. 算数运算符 、比较运算符 、逻辑运算符
  3. >><< 比 + - 低
  4. 与运算 高于 或运算

数据类型的转换#

  1. 为什么要进行数据类型的转换

    ​ 1.两个数据在运算时,要统一类型,结果的类型就是统一后的类型

    ​ 2.在调用一个功能时,需要一个类型的数据,而我们拥有的数据和需要的数据类型不一致,要进行类型转换

  2. 如何进行数据转型

    1. 自动转型:自动向上转型

    byte — short — int — long — float — double

    char — int …

//5.0 double类型   2 int类型
//自动向上转型 2转为了2.0
System.out.println(5.0/2);   //2.5
//'a' 是char类型 1是int类型
System.out.println('a'+1);  //98
System.out.println(2.0%5);  //2.0
//17.0是double 0是int
//0转为double 无限接近0的小数
System.out.println(17.0/0);  //Infinity无穷大
int i = 16;
System.out.println(Math.sqrt(i));

​ 2.强制转型:需要向下转型时

​ (类型)变量或值

​ 强制转型可能会造成数据的缺失

System.out.println((int)5.0/2);
System.out.println((int)5.9/2);
System.out.println((char)('a'+1));  //b
double d1 = 3.1;
double d2 = 3.2;
Math.floorDiv((int)d1,(int)d2);

八种基本类型除了boolean类型都可以互相转换

编程时尽量使用 i++ 或 i+=3 、i*=5 写法,因为不需要转型操作

Java数据类型
https://mizuki.mysqil.com/posts/2java数据类型/
作者
SuifengFlying
发布于
2026-07-28
许可协议
CC BY-NC-SA 4.0

Java SE

2 / 13

Related articles

部分信息可能已经过时

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00