一.字面常量
1.常量: 程序运行期间,固定不变的量
2.分类:字符串常量;整型常量;浮点数常量;字符常量;布尔常量;空常量
二.数据类型
1.分类:
(1)基本数据类型/内置类型:整型(byte,short,ing long);浮点型(float,double);字符类型(char);布尔类型(bool)
(2)引用数据类型:数组类,接口,String
数据类型 | 关键字 | 内存占用(字节) | 范围 |
字节型 | byte | 1 | -128~127 |
短整型 | short | 2 | -32768~32767 |
整型 | int | 4 | -2^31~2^31-1 |
长整型 | long | 8 | -2^63~2^62-1 |
单精度浮点型 | float | 4 | 有,但一般不关注 |
双精度浮点型 | double | 8 | 有,但一般不关注 |
字符型 | char | 2 | 0~65535 |
布尔型 | bool | 没有明确规定 | true,false |
三.变量
1.基本概念
1.概念:经常改变的内容,在java中成为变量;数据类型用来定义不同种类的变量
2.语法格式:数据类型 变量名 = 初始值
2.分类
1.整型变量
(1)初始化:在定义时给定初始值;定义时不给定初始值,使用前设置初始值(不然报错)
(2)能表示的范围:
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
(3)注意:int不论何种系统下都是4字节;
没有初始值可以设置为0;
给变量设置初始值时不能超出int的表示范围,否则会发生溢出;
变量在使用之前必须赋初值,不然报错;
int的包装类型为Integer
2.长整型变量
(1)定义:
long b=10;
long a=100L;//为了区分int和long类型,一般在long类型变量的初始值后加l或L
(2)表示范围:
System.out.println(Long.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
(3)注意:
long不论在哪个系统下都占8字节;
长整型变量的初始值后加L或l;
long的包装类型为Long;
3.短整型变量
(1)范围表示:
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
(2)注意:short不管在哪个系统下都占2字节;
short的包装类型为Short;
4.浮点型变量
单精度浮点型:
(1)定义 :
float f=12.5;//error编译器认为12.5是double类型
float a=12.5f;
float b=15.6F;
(2)float的包装类型为Float
双精度浮点型
(1)int/int=int(舍弃小数部分)
int a=1,b=2;
System.out.println(a/b);//1
double x=1,y=2;
System.out.println(x/y);//0.500000
(2)double类型的内存布局遵守IEEE754标准,尝试使用有限的内存空间表示可能无限的小数,势必存在一定的精度误差,因此浮点数是个近似值,并不是精确值(但可以精确到小数点后几位)
(3)double类型的包装类型是Double;
5.字符型变量
(1)定义:
char c1='a';
char c2=97;//不能为负数
char c3='好';//一个中文字占两个字节,执行时加上-encoding UTF-8
(2)注意:java中的字符可以存放整型;
java中使用 '字母' 的形式表示字符字面值;
计算机中的字符本质上是一个整数,java中用Unicode表示字符,因此一个字符占用两个字节,表示的字符种类更多,也包括中文;
char的包装类型是Char;
6.布尔型变量
(1)定义:
boolean value=true;
System.out.println(value);//true
System.out.println(value+1);//error,+的操作数类型不匹配
(2)注意:boolean类型的变量只有两种取值,true表示真,false表示假;
java的boolean类型和int不能互相转换;
java的虚拟规范中,并未明确表示boolean占几个字节,也没有专门用来处理boolean的字节码指令;
boolean的包装类型是Boolean;
7.类型与类型之间的关系
类型转换
在java中,参与运算的数据类型不一致时,就会进行类型转换;
1.自动类型转换(隐式)
(1)代码编译时,编译器会自动进行处理;
(2)特点:数据范围小的数据转为数据范围大对数据时自动进行
(3)举例:
int a=100;
long b=10L;
b=a;//编译器自动将a提升为long类型,然后赋值
a=b;//error,发生数据丢失
byte c=155555;//error,超过byte类型范围,发生数据丢失
2.强制类型转换(显式)
(1)注意:范围大的复制给范围小的,可能发生精度丢失;
强转不一定成功,不相干的类型不能转换
(2)举例
int a=10;
double b=15.2;
a=b;//error,类型不兼容,可能发生数据丢失
a=(int)b;//小数点之后的全部舍弃
boolean flag=true;
a=flag;//error,类型不兼容
flag=a;//error,类型不兼容
类型提升
不同类型的数据之间相互运算时数据类型小的会被提升成数据类型大的;
举例:
int a=10;
long b=30;
int c=a+b;//error
long c=a+b;//a先被提升为long类型,再参与计算
byte a=10,b=20;
byte c=a+b;//error
//a,b都别被提升为int类型,再进行计算,赋值给c时可能发生数据丢失
注意:对于short,byte这种内存小于字节的类型,会先被提升为int型,再运算
四.字符串类型
java中使用String类定义字符串类型
String s1="hello",s2="java";
System.out.println(s1+s2);//hellojava
//+为连接符,表示将s1,s2进行拼接
int a=10,b=20;
System.out.println("a="+a+"b="+b);//a=10b=20
System.out.println("a+b="+a+b);//a+b=ab
System.out.println("a+b="+(a+b));//a+b=30
System.out.println(a+b+"=a+b");//30=a+b
字符串和整型数字之间可以进行转换
//int----->String
int num=10;
String s1=num+"";
String s2=String.valueOf(num);
//String----->int
String s1="100",s2="10ab";
int num1=Integer.parselInt(s1);
int num2=Integer.parselInt(s2);//error
//要转换的String类型必须是一个合法的字符串数字