目录
1.字面常量
1.1 简单举例
看下面这个语句:
System.out.println("Hello World");
不论程序何时运行,输出的总是Hello World,”Hello World“就是字面常量。
1.2 常量概念
即程序运行期间,固定不变的量。
比如:一周有七天,一年有12个月...
举例:
public class Test {
public static void main(String[] args) {
System.out.println(false);
System.out.println('b');
System.out.println(13.14);
System.out.println(2);
}
}
这里的false,‘b’,13.14,2都是常量,将其称为字面常量。
1.3 字面常量的分类
①字符串常量:由" "括起来的,例如:"Hello","1314"。
②整形常量:程序中直接写的数字(无小数点),例如:10,100。
③浮点型变量:程序中直接写的小数,例如:13.14。
④字符常量:由‘ ’括起来的当个字符,例如:‘A’。
⑤布尔常量:只有true和false。
注意:①②③④⑤在Java中都称为数据类型。
2.数据类型
2.1 数据类型的分类
数据类型 | |
---|---|
基本数据类型 | 引用数据类型 |
基本数据类型 | 关键字 | 内存占用 | 范围 | 变量包装类型 | ||
四类八种 | 整型 | 字节型 | byte | 1字节 | -128~127 | Byte |
短整型 | short | 2字节 | -32768~32767 | Short | ||
整型 | int | 4字节 | -2^31~2^31-1 | Integer | ||
长整型 | long | 8字节 | -2^63~2^63-1 | Long | ||
浮点型 | 单精度浮点型 | float | 4字节 | 有,一般不关注 | Float | |
双精度浮点型 | double | 8字节 | 有,一般不关注 | Double | ||
字符型 | 字符型 | char | 2字节 | 0~65535 | Character | |
布尔型 | 布尔型 | boolean | 无明确规定 | true和false | Boolean |
注:①不论在16位系统还是32位系统,内存占用都不变。
②整型与浮点型都是带有符号的。
③整形默认为int型,浮点型默认为double型。
④字符串属于引用类型。
⑤由于int类型为4个字节,32个比特位(一个符号位和31个数值位)
所以最大值为2^31-1,最小值为-2^31。
(整形范围计算皆同上)
⑥浮点数与整数在内存中的存储方式不同,不能简单使用2^n的形式计算
⑦在Java虚拟机规范中,没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令;而在Oracle公司的虚拟机实现中,boolean占1个字节。
3.变量
3.1 变量概念
即经常改变的内容。例如:人的年龄,体重等。
而数据类型就是用来定义不同种类变量的。
3.2 语法格式
数据类型 变量名=初始值;(左操作数=右操作数)
例如:
public class Test2 {
public static void main(String[] args) {
int a = 10;//在Java中=表示赋值
double b = 1.1;
char ch = 'c';
boolean d = true;
int m1 = 1,m2 = 2,m3 =3;//在一行可以定义多个相同类型的变量
System.out.println(a);
System.out.println(b);
System.out.println(ch);
System.out.println(d);
System.out.println(m1);
System.out.println(m2);
System.out.println(m3);
}
}
运行结果如下:
那么如果不赋值会发生什么呢?让我们浅试一下
public class Test2 {
public static void main(String[] args) {
int a;
System.out.println(a);
}
}
可以看出,当不赋初值时,编译器会报错,无法运行,由此可见,Java很安全。
3.3 整型变量
3.3.1 整型变量
①int定义的整型变量(初值设置)
//方式一:在定义时给出初始值
int a = 10;
System.out.println(a);
//方式二:在使用前设置初值
int b;
b = 10;
System.out.println(b);
注:如果没有合适的初始值设置,可以设置为0。
②int型变量所能表示的范围:
public class Test2 {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
运行结果如下:
③变量设置初始值时,不能超过int的表示范围,否则会导致溢出。
public class Test2 {
public static void main(String[] args) {
int m = 12334556766;
System.out.println(m);
}
}
运行结果如下:
3.3.2 长整型变量
①long定义的长整型变量
public class Test2 {
public static void main(String[] args) {
long a = 10L;//为了区分int和long类型,一般在long类型变量的初始值后加L
System.out.println(a);
}
}
运行结果如下:
②long型变量所能表示的范围
public class Test2 {
public static void main(String[] args) {
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
}
}
运行结果如下:
3.3.3 短整型变量
①short定义的短整型变量
public class Test2 {
public static void main(String[] args) {
short a = 10;
System.out.println(a);
}
}
运行结果如下:
②short型变量所能表示的范围
public class Test2 {
public static void main(String[] args) {
System.out.println(Short.MAX_VALUE);
System.out.println(Short.MIN_VALUE);
}
}
运行结果如下:
3.3.4 字节型变量
①byte定义的字节型变量
public class Test2 {
public static void main(String[] args) {
byte a = 10;
System.out.println(a);
}
}
运行结果如下:
②byte型变量所能表示的范围
public class Test2 {
public static void main(String[] args) {
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
}
}
运行结果如下:
3.4 浮点型变量
3.4.1 双精度浮点型
①double定义的双精度浮点型变量
public class Test2 {
public static void main(String[] args) {
double d = 1.1;
System.out.println(d);
}
}
运行结果如下:
②神奇的代码Ⅰ
public class Test2 {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a/b);//会输出0.5么
}
}
看运行结果:
为什么输出的不是0.5呢?
在Java中int/int的值仍然是int(会直接舍弃小数部分),所以为了得到0.5,需要用double类型计算,如下所示:
public class Test2 {
public static void main(String[] args) {
double a = 1;
double b = 2;
System.out.println(a/b);
}
}
运行结果如下:
神奇的代码Ⅱ
public class Test2 {
public static void main(String[] args) {
double a = 1.1;
double b = 1.1;
System.out.println(a*b);//会输出1.21么
}
}
看运行结果:
那么为什么不是1.21呢?
因为小数在计算机当中,没有一个非常完全的表示,而是精确到了某一位。
比如说一个抽奖活动,说你有99.99%的概率获奖,其实这个是精确之后的表述,但其实可能是99.99000002%。
3.4.2 单精度浮点型
①float定义的单精度浮点型变量
public class Test2 {
public static void main(String[] args) {
float a = 1.8f;//1.8F也可
System.out.println(a);
}
}
运行结果如下:
②由于float类型表示的数据精度范围较小,所以一般在工程上用到浮点数都优先考虑double。
3.5 字符型变量
①char定义的字符型变量
public class Test2 {
public static void main(String[] args) {
char ch = 'A';//大写字母
char m = '1';//数字字符
System.out.println(ch);
System.out.println(m);
}
}
运行结果如下:
注:①java中使用单引号+单个字母的形式表示字符字面值。
②Java中的字符可以存放整形(Java中使用Unicode表示字符,一个字符占用两个字节,表示的字符种类更多,包括中文)
例如:
public class Test2 {
public static void main(String[] args) {
char ch = '帅';
System.out.println(ch);
}
}
运行结果如下:
3.6 布尔型变量
①boolean定义的布尔型变量
public class Test2 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println(a);
System.out.println(b);
}
}
运行结果如下:
注:①boolean类型的变量只有true(表示真)和false(表示假)两种取值。
②不存在1表示true,0表示false的用法。
③Java的boolean类型和int类型不能相互转换,看以下代码:
public class Test2 {
public static void main(String[] args) {
boolean a = true;
System.out.println(a+1);
}
}
看运行结果: