目录
1.字面常量
2.数据类型
3.变量
3.1变量的概念和语法格式
3.2整型变量
3.2.1整型变量(int)
3.2.2长整型变量(long)
3.2.2短整型变量(short)
3.2.4字节型变量(byte)
3.3浮点型变量
3.3.1单精度浮点型(floa)
3.3.2双精度浮点型(double)
3.4字符型变量(char)
3.5布尔型变量
3.6类型转换
3.6.1自动类型转换(隐式类型转换)
3.6.2强制类型转换(显式类型转换)
3.6.3题目分析
3.7类型提升
4.字符串类型
常量就是在程序运行期间,固定不变的量。
字面常量的分类:
字符串常量 | 由 "" 括起来的,比如 “12345” 、 “hello” 、 “ 你好 ” |
整形常量 | 程序中直接写的数字 ( 注意没有小数点 ) ,比如: 100 、 1000 |
浮点数常量 | 程序中直接写的小数,比如: 3.14 、 0.49 |
字符常量 | 由 单引号 括起来的当个字符,比如:‘A’、 ‘1’ |
布尔常量 | 只有两种 true 和 false |
空常量 | null |
Java的数据类型主要由两大类: 基本数据类型和引用数据类型
基本数据类型分为四类八种:
四类:
整型,浮点型,字符型,布尔型
八种:
数据类型 | 关键字 | 内存占用 | 范围 |
---|---|---|---|
字符型 | byte | 1字节 | -128~127 |
字符型 | byte | 1字节 | -128~127 |
整型 | int | 4字节 | -2^31~ 2^32-1 |
长整型 | long | 8字节 | -2^63~ 2^63-1 |
单精度浮点数 | float | 4字节 | 有范围,一般不关注 |
双精度浮点数 | double | 8字节 | 有范围,一般不关注 |
字符型 | char | 2字节 | 0 ~ 65535(Unicode) |
布尔型 | boolean | 没有明确规定 | true / false |
引用数据类型 :
数组,String,类,接口,枚举 ... ...
常量是始终不变的,而在程序中,有些内容可能会经常改变,对于这些经常改变的内容,在Java中,称为变量。而数据类型就是用来定义不同种类的变量的。
变量就相当于是一个小箱子,这个箱子里面可以放东西,箱子有大有小的。
包装类:每个基本数据类型,都会对应个类类型,这个类类型就是包装类
定义变量的语法格式为:
数据类型 变量名 = 初始值;
1.大小:int是4字节(可移植型强,无论是在32或64位系统下都是4字节);
表示范围(-2^31 ~ 2^31-1)
2.包装类:int的包装类型为 Integer
3.在Java里面,int 没有所谓的无符号数,所以,int既能表示正数,也能表示负数
public class TestDemo {
public static void main(String[] args) {
//1.在定义时给出初始值
int a = 10;
System.out.println(a);
//2.在定义时没有给初始值,但使用时必须设置初始值
int b;
b = 10;
System.out.println(b);
//3.int 型变量的表示范围
System.out.println("最大值"+Integer.MAX_VALUE);
System.out.println("最小值"+Integer.MIN_VALUE);
//4.在定义int 性变量时,所赋值不能超过int的范围
int d = 1234566702334;//编译时报错,初值超过int的范围
}
}
1.大小:long不论在哪种操作系统下,都占8个字节
表示范围(-2^63 ~ 2^63-1)
2.长整型变量的初始值后面加L或l
3.包装类:long的包装类型为Long
public calss TestDemo{
public static void main1(String[] args) {
//1.long 为了区分int和long,一般给long类型变量的初始值之后加上L或l
long a = 10L;
System.out.println(a);
//2.long类型表示的范围
System.out.println("最大值"+Long.MAX_VALUE);
System.out.println("最小值"+Long.MIN_VALUE);
}
}
1.大小:short在任何系统下都占2个字节
表示范围(-2^15 ~ 2^15-1)
2.没有无符号的,short可以表示正数或负数
3.包装类类型:short的包装类类型是Short
public class TestDome{
public static void main(String[] args) {
short a = 10;
System.out.println(a);
//short型表示的范围
System.out.println("最大值"+Short.MAX_VALUE);
System.out.println("最小值"+Short.MIN_VALUE);
}
}
1.大小:byte在任何系统下都占1个字节
范围(-2^7 ~ 2^7-1,即-128~127)
2.包装类类型:byte包装类类型为Byte
public class TestDome{
public static void main(String[] args) {
byte b = 10;
System.out.println(b);
//byte型所表示的范围
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
}
}
1.大小:float在任何大小的系统下都占用4个字节
2.包装类类型:float的包装类类型为Float
3.float变量的初始值后面加F或f
public class TestDome{
public static void main(String[] args) {
float num = 1.0F;
System.out.println(num);
}
}
1.大小:double在任何系统下都占8个字节
2.包装类类型:double的包装类类型为Double
3.double类型遵循内存布局IEEE754标准,浮点数是一个近似值,并不是精确值
public static void main4(String[] args) {
double d = 3.14;
System.out.println(d);
}
1.大小:char在任何大小的系统下,都占用2个字节,并且不能表示负数
2.C语言中使用ASCII表示字符,而在Java中使用Unicode表示字符
因此,表示的种类更多(0~65535),包括了很多语言中文,拉丁文等等
3.包装类类型:char的包装类类型为Character
public static void main(String[] args) {
char ch = 'a';
char ch2 = '高';
char ch3 = '1';
System.out.println(ch);
System.out.println(ch2);
System.out.println(ch3);
}
1.Boolean类型的变量只有两种取值,true表示真或false表示假
2.Java的boolean类型和int类型不能相互转换,不存在1表示true,0表示false
3.包装类类型:boolean的包装类类型为Boolean
4.Java的虚拟机中,并没有明确规定Boolean占几个字节
public class TestDome{
public static void main(String[] args) {
boolean value = true;
System.out.println(value);
}
}
自动类型转换即: 代码不需要经过任何处理,在代码编译时,编译器会自动进行处理 。特点: 数据范围小的转为数据范围大的时会自动进行 。
也就是 小范围-》大范围 可以
大范围-》小范围 不可以
public class TestDome{
public static void main(String[] args) {
System.out.println(1024);//整型情况下默认为int
System.out.println(3.14);//浮点型情况下默认为double
int a = 100;
long b = 10L;
b = a;//a是int 小范围,b是long 大范围 ,把小范围赋给大范围,会自动将a提升为大范围也就是long类型
a =b;//这样反过来的话就是 大范围-》小范围 会有数据丢失不安全
float f = 3.14F;
double d = 5.12;
d = f;//小范围-》大范围,可以,f会自动转化为double
f = d;//大范围-》小范围,不可以,会有数据丢失不安全
byte b1 = 100;//编译通过
byte b2 = 257;//编译失败,257超过byte的数据范围,有数据丢失
}
}
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点: 数据范围大的到数据范围小的。
即
强制类型转换发生的情况时:大范围-》小范围
public class TestDome{
public static void main(String[] args) {
int a = 10;
long b = 100L;
b = a;//小范围-》大范围 可以
a = (int)b;//大范围-》小范围 需要强制转化
float f = 3.14F;
double d = 5.12;
d = f;//小范围-》大范围 可以
f = (float)d;// 大范围-》小范围 需要强制转化
a = d;//报错,类型不兼容
a = (int)d;//大范围-》小范围 ,需要强转,小数点之后全部丢弃
byte b1 = 100;//100默认为int,隐式转换后,没有超过byte范围
byte b2 = (byte)257;//257默认为int,超过了byte范围,需要强制转化
boolean flag = true;
a = flag;//编译失败
flag = a;//编译失败 类型不兼容
}
}
注意:
1.小范围-》大范围 隐式转化
2.大范围-》小范围 必须强转,否则会编译失败,并且也可能精度丢失
3.将一个字面值常量进行赋值时,Java会自动针对数字范围进行检查
4.强制转化不一定成功,不想干的类型不能相互转化
int i = 10;
float f = 19.9F;
i = f;//会报错吗
答案是:会报错,因为虽然 i 和 f 都是4字节的,但float能表示的数据宽度,除了整数部分,还有小数部分,把整数部分给了int 那小数部分怎么办? 会丢失数据,存在危险。
1.当两种不一样的数据类型进行运算时,会把其中的一个较小的数据类型,转换为较大的参与运算
int a = 10;
long b = 20;
int c = a + b;//编译失败 a+b->int+long->long+long 赋值给int会丢失数据
long d = a + b;//编译通过 赋值给long就可以
2.小于4字节的类型,运算都会先提升为int,再参与运算
byte a = 10;
byte b = 20;
byte c = a + b;
system.out.printfln(c);//编译失败,从a+b-》提升为 int+int-》byte 可能会有损失
byte c = (byte)(a + b);
system.out.printfln(c);//编译通过,将int强制转化为byte
在Java中使用String类定义字符串类型,
和C有点不一样,没有‘\0’结尾,根本没有这个说法
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2);//s1+s2表示:s1和s2进行拼接
}
在有些情况下,需要将字符串和整形数字之间进行转换:
1.int转成String
int num = 10;
String str1 = num + "";//法1
String str2 = String.valueOf(num);//法2
2.String转成int
String str = "100";
int num = Integer.parseInt(str);