1. 变量
1.1 变量的概念
- 变量是计算机内存中的一块存储单元,是存储数据的基本单元
- 变量的组成包括:数据类型、变量名、值,后文会具体描述
- 变量的本质作用就是去记录数据的,比如说记录一个人的身高、体重、年龄,就需要去程序中记录数据,而不同的数据使用不同的数据类型去存储,后文会具体描述
1.2 变量的定义
变量的定义有三种方法
- 直接声明
- 先声明后赋值
- 多个同类型变量声明与赋值
代码举例:
public class VariableDefine {
public static void main(String[] args) {
int age; //第一种方法:变量的声明
age = 21;
int number = 12345; //第二种方法:先声明后赋值
int a,b,c = 100,d=123; //第三种方法:多个同类型变量声明与赋值
System.out.println("age = " + age);
System.out.println("number = " + number);
System.out.println("c = " + c);
System.out.println("d = " + d);
}
}
-
以上代码可以清晰看到三种变量的定义方法
-
输出结果:
-
要实现 age = 21这种效果,只需要在输出时,用
字符串 + 变量
就可以了,如上输出,其中,+
只做文字拼接,不做加法计算 -
注意如果只是单纯输出变量的值,不需要双引号,如
System.out.println(age); //输出变量的值,不需要加双引号 System.out.println("age"); //如果加了双引号,那么输出的是字符age,既不是变量age也不是变量的值。
输出结果
-
注意事项:
-
未赋值的变量是不能使用的,当我们注释掉了age,此时age就没有赋值,可以看到没有赋值是直接报错了
-
第三种定义变量的方法,不推荐使用,因为代码可读性不高,不便于阅读
1.3 变量概念解析
有了变量的定义,用以上代码解析一下变量的概念
- 变量是计算机内存中的一块存储单元,是存储数据的基本单元
- 当我们声明一个变量age,
int age;
那么在内存当中就会开辟一个int字节的空间,这块空间的名称叫做age,我们可以通过age来访问到这一块空间
- 当我们声明一个变量age,
此时里面还没有数据,我们只需要赋值age = 21;
就把数据存到内存当中
- 变量的组成包括:数据类型、变量名、值
- 比如说:
int number = 12345;
,其中int是整数类型,变量名为number,值为12345,这三个部分组成了一个number变量
- 比如说:
2.数据类型
Java是一个强类型的语言,它的变量具有严格的数据类型区分
在Java中,任何一个值都有他对应的数据类型
我们可以大概的把数据类型分为两类
- 基本数据类型
- 整数
- 浮点数
- 字符类型
- 布尔类型
- 引用数据类型(可以理解为,除了基本数据类型其他基本上都是引用数据类型)
- 字符串
- 数组
- 对象
下面将会具体介绍数据类型
2.1 整数类型
整数类型里面有四种类型
类型 | 字节 | 取值范围(二进制) | 取值范围(十进制) |
---|---|---|---|
byte | 1字节 | -2^7 ~2^15-1 | -128~127 |
short | 2字节 | -2^15 ~ 2^15-1 | -32768~32767 |
int | 4字节 | -2^31 ~ 2^31-1 | -2147483648~2147483647 |
long | 8字节 | -2^63 ~ 2^63-1 | -9223372036854775808~9223372036854775807 |
- 其中,int是整数的默认类型
代码举例:
public class DateType {
public static void main(String[] args) {
byte a = 127;
short b = 32767;
int c = 2147483647;
long d = 9223372036854775807;
}
}
可以看到,实际上在编译器上, 当我们定义一个long类型,为什么输入了数字之后,明明是long的合法范围,却显示最大呢?
_id=img-Os2Lh8gN-1725799836837)
-
那是因为整数的默认类型是int类型,所以当你输入这么大个数字的时候,其实默认的是把这个数字存放到int类型的空间中,但是很显而易见,四个字节的空间无法存放这么大的数字。
-
解决方法:在后面加个L,表示是long类型,即
long d = 9223372036854775807L;
-
-
那么我们什么时候会加L呢?
- 当数值超过了int类型的范围,则需要在数值后面加上
L
- 当数值并未超过int类型的范围,则可加可不加
- 一般如果不加的话,且没超过int类型的范围,那么就是默认int类型,即使你变量的数据类型是long,但值如果没超过int类型的话,实际上还是以int类型存放,因为假如定义了
long d = 100;
,那么就会开辟8个字节空间来存放100,造成了很大的空间浪费
- 一般如果不加的话,且没超过int类型的范围,那么就是默认int类型,即使你变量的数据类型是long,但值如果没超过int类型的话,实际上还是以int类型存放,因为假如定义了
- 当数值超过了int类型的范围,则需要在数值后面加上
2.2 浮点类型
浮点类型主要是单精度浮点数(float)和双精度浮点数(double),两者都是近似值而不是精确值
类型 | 字节 | 负数取值范围 | 正数取值范围 |
---|---|---|---|
float | 4字节 | -3.4E+38 ~ -1.4E-45 | 1.4E-45 ~ 3.4E+38 |
double | 8字节 | -1.7E+308 ~ -4.9E-324 | 4.9E-324 ~ 1.7E+308 |
其中,double为浮点数的默认类型,若要为float赋值,需要在值的后面加F
代码举例:
public class DateType {
public static void main(String[] args) {
float a = 3.4E+38F;
double b = 1.7E+308;
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
2.3 字符类型
类型 | 字节 | 取值范围(无符号数) | 字符编码 |
---|---|---|---|
char | 2字节 | 0 ~ 65535 | Unicode字符集(万国码) |
- Unicode字符集支持ASCII码
2.3.1 字符类型的赋值方式
-
字符赋值
public class DateType { public static void main(String[] args) { char ch1 = 'a'; char ch2 = '1'; char ch3 = '耶'; char ch4 = '!'; System.out.println("ch1 = " + ch1); System.out.println("ch2 = " + ch2); System.out.println("ch3 = " + ch3); System.out.println("ch4 = " + ch4); } }
-
整数赋值
-
用ASCII码的值进行直接赋值 0~127
public class DateType { public static void main(String[] args) { char ch1 = 33; char ch2 = 65; char ch3 = 98; char ch4 = 100; System.out.println("ch1 = " + ch1); System.out.println("ch2 = " + ch2); System.out.println("ch3 = " + ch3); System.out.println("ch4 = " + ch4); } }
运行结果
-
用Unicode(万国码)的值进行直接赋值 0~65535
-
中文的取值范围是:\u4e00(19968) ~ \u9af5(40969) 十六进制(十进制)
public class DateType { public static void main(String[] args) { char ch1 = 19968; char ch2 = 20249; char ch3 = 20255; char ch4 = 40869; System.out.println("ch1 = " + ch1); System.out.println("ch2 = " + ch2); System.out.println("ch3 = " + ch3); System.out.println("ch4 = " + ch4); } }
运行结果
-
-
-
进制赋值
-
用单引号包括十六进制的Unicode字符值,要以\u开头
package com.csdn.code.day3; public class DateType { public static void main(String[] args) { char ch1 = '\u4e00'; char ch2 = '\u4fa2'; char ch3 = '\u5af3'; char ch4 = '\u9af5'; System.out.println("ch1 = " + ch1); System.out.println("ch2 = " + ch2); System.out.println("ch3 = " + ch3); System.out.println("ch4 = " + ch4); } }
-
中文的取值范围是:\u4e00 ~ \u9af5 十六进制
运行结果
-
-
2.3.2 转义字符
我们刚刚看到的’\u’就是一个转义字符,表示一个十六进制数对应的的字符
下面我们来具体了解一下什么是转义字符
转义字符概念:用于保存一些特殊符号或者是一些特殊的效果
以下是常用的转义字符
转义字符 | 描述 |
---|---|
\n | 换行符 |
\t | 缩进(制表位) |
\ \ | 反斜线 |
\‘ | 单引号 |
‘’ | 双引号 |
代码举例:
public class DateType {
public static void main(String[] args) {
System.out.println("i\nlove\nyou\n");
System.out.println("i\tlove\tyou\t");
System.out.println("\\i love you\\");
System.out.println("\'i love you\'");
System.out.println("\"i love you\"");
}
}
运行结果
2.4 布尔类型
类型 | 字节 | 取值范围 | 描述 |
---|---|---|---|
boolean | 1字节 | true/false | 仅可描述”真“或者”假“ |
- 布尔类型不能参加算术运算
- true表示真
- false表示假
代码举例:
package com.csdn.code.day3;
public class DateType {
public static void main(String[] args) {
boolean a = true; //直接对布尔类型的变量赋值
boolean b = false; //直接赋true or false
int c = 20;
int d = 40;
boolean result1 = c > d; //赋值 最终结果为true or false的表达式
boolean result2 = c < d;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("result1 = " + result1);
System.out.println("result2 = " + result2);
}
}
运行结果如下:
2.5 String类型
类型 | 取值范围 | 字符编码 |
---|---|---|
String | 任何""之间的值 | Unicode字符编码 |
String类型是JDK提供的一个类,属于引用数据类型,任何""包括的内容都是字符串
代码举例
package com.csdn.code.day3;
public class DateType {
public static void main(String[] args) {
String str1 = "I am ?0 o O";
String str2 = "I am 21 years old\n";
System.out.println(str1);
System.out.print(str2); // \n和println()方法都有换行的效果,选其一即可
}
}
运行结果