-
概念:在计算内存中一块小的存储空间,用于存储数据,是存储数据的基本单元
-
变量的组成部分:
(1)数据类型:决定了变量在jvm内存中的空间大小
(2)变量名:为了方便查找该内存空间
(3)数据:可以通过变量名进行存储或是查找数据
-
变量的定义:
(1)先声明再赋值: 声明 : 数据类型 变量名; 赋值 : 变量名 = 值; (2)声明的同时并赋值: 数据类型 变量名 = 值; 注意:在同一个类中,变量名不要重名 (3)一次性定义多个同类型的变量: 数据类型 变量名1,变量名2 = 值,变量名3;
package day2; public class Test{ public static void main(String[] args){ //声明 //存储整数: int int a; a=5; System.out.println(a); int c,d=8,f; c=23; f=69; System.out.println(d); System.out.println(c); System.out.println(f); } }
1B = 8b(bit简称b,称为 位/比特位)
1kB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
3. 1. 注意:Java是一种强类型的语言,对应的数据必须存储在对应的变量中
1. 基本数据类型(原始数据类型、简单数据类型)
```
(1)整数类型
byte 1B -128 ~ 127
short 2B -32768 ~ 32767
int 4B -2147483648 ~ 2147483648
long 8B -922京 ~ 922京-1
注意:long的字面值需要加l或是L(建议使用L,区分数字1和l)
字面值:程序中可以给某种类型变量赋的值
(2)小数类型(浮点类型)
double 8B 双精度
float 4B 单精度
注意:float字面值后面必须加f或F,不能省略
double字面值后面可以加d或D,可以省略
float类型超过精度后会将后面几位四舍五入,一共保存七位即可
double类型精度会更高,大概在16位保证正确
float和double都可以采用科学计数法的方式进行存储,采用近似值
double ds = 12345678912.34;// 1.234567891234E10
4Bfloat存储的范围要比8B的long存储的数据范围更大,原因:Java中浮点底层可以采用科学计数法的形式存储(近似值),float相对于long是大数据类型
(3)字符类型
char 2B
Java中的字符字面形式有以下三种:
a.单引号('')直接引起来的一个字符
char c ='A';
char c2 = '中';
char c3 = '+';
char c4 = '8';//0~9之间的每个数字可以作为一个字符
b.可以以整数形式作为char字面值,整数范围是0~65535(29233--爱)
char c1=48;//字符0
char c2=65;//字符A
char c3=97;//字符a
c.以十六进制的unicode形式进行存储
char c ='u0041';//等价于 十进制的65,存储'A'字符
Java中的转义字符:
n 换行
t 水平跳格
\ 反斜杠
' 单引号
" 双引号
(4)布尔类型
boolean 1B 字面值 true/false
注意:Java中true代表成立(某种关系)
false代表不成立
Java中boolean中字面值只能是true/false;
区分于c语言中的boolean(0/1)
```
2. 引用数据类型(对象数据类型)
```
数组、对象、接口、集合等都是引用类型(对象类型)
目前以String的应用来讲解 引用数据类型:
String:字符串用双引号("")引起来的一个或是多个字符
String s1 = "hello";
String s2 ="a";
String s3 = "孙朝卿";
```
```
例题:
姓名 String name
年龄 int age
成绩 double/int score
性别 boolean sex=true; char c='女'; String s = "男";
电话 String tel(方便校验);long l=1312321545l;
身份证号 String id;(不能用long,有的身份证号最后一位会存在x)
地址 String address
商品的数量 int shu
商品的价格 double price
```
## 三、数据类型的转换
1. 自动类型提升
```
(1)应用场景:将小数据的变量赋值给大数据类型的变量,可与直接赋值
注意:存储数据范围越大,对应的数据类型为大数据类型
(2)语法:
源数据类型 变量名 = 值;//byte b = 6;
目标类型 变量名 = 源数据类型的变量;//int a = b;
注意:目标类型大于源数据类型可以直接赋值
(3)自动类型提升的规则(小数据类型赋值大数据类型 )
a.byte->short->int->long->float->double
b.char->int->long->float->double
面试题目:分析以下代码编译是否通过,不通过说明原因?
char c = 95;//编译通过
int i = 65;
char cs = i;//编译不通过,错误原因违反自动类型提升规则
```
2. 强制类型转换
```
(1)应用场景:将大数据类型的变量赋值给小数据类型的变量,必须通过强制类型转换
(2)语法:
源数据类型 变量名 = 值 ;//double d =3.6;
目标类型 变量名 = (目标类型)源数据类型的变量;
int i = (int)d;
(3)强制转化结果:
a.如果将float/double浮点类型的数据强制转换为整数,则小数点后面的部分直接截断
double d = 3.6;
int i = (int)d;//3
b.强转的大数据类型变量中存储的数据在小数据类型的变量的范围内,则不会影响内容
c.强转的小数据类型变量中存储的数据不在小数据范围内,则从底层存储低位进行截断
int i = 257;
byte b = (byte)i;//1
```
## 四、表达式
1. 表达式:由变量、字面值、运算符等连接组成的式子,通常有一个结果
2. 对于表达式结果的处理方式:(根据实际开发需求来决定)
(1)如果对结果只使用一次,直接在使用的地方写表达式即可
(2)如果对结果多次使用,建议定义一个对应类型变量进行存储
3. 表达式结果对应变量存储规则
(1)如果表达式中有double,则结果为double
(2)如果表达式中有float,则结果为float
(3)如果表达式中有long,则结果为long
(4)其余情况,结果都是int
byte和byte
byte和short
short和short
int分别和short byte
```
面试题目:写出以下代码编译是否正确,正确写出结果,不正确分析原因
byte b=1;
b=b+1;//int b2=b+1;
分析:编译报错,原因是b=b+1结果类型是int类型,需要存储在int类型的变量中
```
## 五、运算符
1. 算术运算符
```
+ - *(乘法) /(除法) %(取模,取余)
注意:+ 在Java中有两种使用方式:
第一种情况:+两端都为数值类型,为加法运算
第二种情况:+两端只要有一端为String类型,此时的+为字符串拼接功能;则结果类型一定是String类型
System.out.println(a+"hello"+b);//5hello2
System.out.println(a+b+"hello");//7hello
System.out.println(a+true+"hello");//编译错误
System.out.println(a+"hello"+true);//ahellotrue
System.out.println(a+b+"hello"+true);//7hellotrue
System.out.println("hello"+true+a+b);//hellotrue52
```
2. 赋值运算符
```
= :直接赋值
+= :求和之后再赋值
-= :求减之后赋值
*= /= %=
注意:+=在应用层没有自动类型提升
byte b=1;
b= b+1;//结果为2
//底层:byte+1-->int,再强转(byte)(b+1)
```
3. 一元运算符
```
++(自增) --(自减)
int c =a++;先使用a原始数据,作为表达式的结果,然后再将a加1
先使用再加1运算
int c = a; a = a+1;
int cc= ++a;先对a变量自身加一,然后再使用加一之后的结果作为表达式的结果
先加一,在使用
a = a+1; int c = a;
实际开发应用:通常使用a++/a--/++a/--a 让a变量的内容随着循环操作自身发生改变,最多使用a++
```
4. 关系运算符
```
两个操作数进行比较
>大于 >=大于等于 <小于 <=小于等于 ==等于 !=不等于
注意:由关系运算符连接的表达式结果为布尔类型,所以被关系运算符连接的表达式称为布尔表达式;true-关系成立false-关系不成立
```
5. 逻辑运算符
```
连接两个结果类型为boolean类型的表达式
&&:逻辑与,两端连接的布尔表达式结构都为true,最终结果为true
只要有一段结果为false,最终结果为false [短路运算符]
||:逻辑或,两端连接的布尔表达式的结果只要有一端为true,最终结果为true
两端同时为false,最终结果才为false
!:逻辑非,对原来的布尔表达式结果进行取反
-----------------------------------------------------------------------
&:逻辑与,两端连接的布尔表达式结果都为true,最终结果为true[非短路]
|:逻辑或,两端连接的布尔表达式的结果只要有一端为true,最终结果为true
两端同时为false,最终结果才为false
面试题目:写出&&和&区别
&&:短路运算符:第一个布尔表达式结果为false,则后面的布尔表达式不再执行
&:非短路运算符:不管第一个布尔表达式的结果为true/false,后面的布尔表达式都必须执行
注意:在开发时,需要用到逻辑与运算符时,如果可以使用&&也可以使用&,则通常采用&&,提升执行效率
```
6. 三元运算符
```
(1)结构:
布尔表达式?表达式1:表达式2
(2)执行原理:?之前的布尔表达式结果为true,则执行表达式1,否则执行表达式2
(3)案例:
int a = 8;
int r = a>9?a+1:a-1;
System.out.println(r);
System.out.println(a<6?a+3:a-3) ;
```



