【25节JavaSE知识点·3】变量 数据类型 数据自动类型提升 表达式 Java运算符

变量

1、概念

计算机中的一块存储空间,用于存放数据,是数据存储的基本单元。

2、组成

变量 = 数据类型 + 变量名 + 数据

3、变量的定义

(1)先声明,后赋值。

数据类型 变量名;

变量名 = 数据;

(2)声明的同时赋值

数据类型 变量名 = 数据;

(3)同时定义多个同类型变量

数据类型 变量名1,变量名2 = 数据,变量名3;

数据类型

1、基本数据类型

概念:也被称为简单数据类型,有8种

整数类型(整型)
  • byte:占用1字节(1B)-128~127
  • short:占用2个字节(2B)
  • int:占用4个字节空间(4B)
  • long:占用8个字节空间(8B)

【1B = 8 bit】

【long类型的数据后面需要添加L或者l】

字面值:程序中用来为变量赋值的具体类型数据

小数类型(浮点型)
单精度浮点类型——float(6位小数)

占用4B空间,提供了科学计数法表示数据,没有数据范围。

【float类型后必须跟F或者f】

双精度浮点类型——double(15位小数)

占用8B空间,提供了科学计数法表示数据,没有数据范围。
注:科学计数法E19表示乘10的19次方
float采用科学计数法,所以存储范围比long大

字符类型

char:占用2B空间
字面量表示:
1)使用单引号引起来的字符

char a = 'A';
char b = '中';

注:Java里每个字符占2B空间,足够存放中文汉字,一个汉字是一个字符。
2)使用整数数值来表示字符字面值 【范围0~65535】

char c = 65;

3)Java默认编码方式为unicode编码,字面值以unicode码存储

 char d = '\u0041';

4)'\n’换行 '\t’空格 '\'表示/ ‘’'单引号 '"'一个双引号

char v1 = '\n';
char v2 = '\t';
char v3 = '\\';
char v4 = '\'';
char v5 = '\"';
布尔类型

boolean,其字面值仅有true和false,占一个字节空间。

2、引用数据类型

类、接口、字符串、数组等类型的数据都是引用数据类型
目前常用的引用类型String字符串
String:定义时使用双引号引起来一个或多个字符。

String str = "Hello";

数据的自动类型提升

1、两个变量之间相互赋值

自动类型提升规则:
1.小范围数据类型的变量可以直接赋值给大范围数据类型的变量

byte–>short–>int–>long–>float–>double

2.char类型的自动提升

char–>int–>long–>float–>double

2、强制类型转换

场合:将大数据变量赋值给小数据类型变量,赋值过程中需要用到强制类型转换。
目标数据类型 变量名 = (目标数据类型) 原数据类型变量名;

int b1 = 5000;
byte b2 = (byte)b1;
System.out.println(b2);

结果:

1)整数类型的变量中的数据合理,数据强转结果不变。

2)若大数据类型变量值超过小数据类型范围,则会截断高位。

3)小数(浮点类型)强制转换成整数类型时,截断取整。

表达式

1、概念

由字面值、运算符、变量组成的式子称为“表达式”,一个正确的表达式通常会有一个确定的结果数据

2、结果类型判定规则

1)若表达式内有一个double类型,结果定为double类型。

2)若没有double,查看是否有float,如果有则为float。

3)若没有double、float要看有没有long,有则是long。

4)若double、float、long都没有,则是int。

面试题:下面程序是否编译通过,通过给出结果,否则请说明错误原因。

byte b = 1;

b = b + 1;

解答:错误。

当进行b + 1时,得到结果为int类型,所以无法用byte类型接收。

byte b = 1;

int c = b + 1;

运算符

1、算术运算符

符号:+ - * / %(取余)
注意:Java中 + 有两种应用
(1)如果 + 两端都是数值类型(整数、小数、char)则 + 做加法运算使用。
(2)如果 + 两端出现一个或者两个String类型,则 + 作为拼接符使用。

【boolean不进行任何运算】

//测试算术符号:符合表达式结果判定规则    
System.out.println(15 / 2);//结果int类型7    
System.out.println(15 % 2);//结果int类型1    
System.out.println(15 / 2.0);//结果double类型7.5    
System.out.println(15.0 / 0);//indinity    
System.out.println('B' - 1);//结果为int类型65    
System.out.println("hello" + "world");//helloworld    
System.out.println(4 + "3");//结果是字符串"43"    
System.out.println(3 + 4 + "5");//结果为字符串"75"    
int a = 10;    
int b = 20;    
System.out.println("a+b=" + a + b); //输出"a+b=1020"    
System.out.println("a+b=" + (a + b));//输出"a+b=30

2、赋值运算符

符号:= += -= *= /= %=

//从右向左,先计算=右边的结果数据,再赋值给左边  
int a = 3;
//复合赋值运算符号  
a += 10;    
//相当于 
a = a + 10  
a *= 10;    
//相当于 
a = a * 10

注意:
byte b = 1;
b = b + 1; //编译报错,结果是int类型,无法赋值给byte
b += 1; //编译通过,
//在Java里,应用层+=不再具有自动类型提升功能;
//底层实际操作:b + 1 -->int 再将int类型强制转换成byte类型

3、一元运算符

符号:++ (自增) – (自减)
(1) a ++ 或者++ a 代表在a变量原值的基础上自增1
(2) a – 或者-- a 代表在a变量原值的基础上自减1

a++和++a的区别:

在运算过程中,有两个值出现,一个是整个表达式的结果,一个是a的原值改变。

a ++:先获取a的原值作为整个表达式的结果,再对a自加。
++a:先对a的数据加1,再获取a的当前值作为整个表达式的结果使用。

面试题:
请说出下列表达式result的结果

int a = 3;
   int result = a ++ + (a ++) + (a ++);
   //a 4 5 6
   //result 3+4+5=12
   int result = (++ a) + (++ a) +(++ a);
  //a 4 5 6
   //result 4+5+6=15
   int result = (a ++) + (++ a) + (a ++);
   //a 4 5 6
   //result 3+5+5=13

4、关系运算符

符号:> < >= <= == !=

注意:

(1)关系运算符连接表达式,若关系成立,则结果为true;若关系不成立则为false;

(2)关系运算符连接到表达式被称为"布尔表达式";

(3)不支持数学长等式

5、逻辑运算符

逻辑运算符连接的表达式是布尔表达式

符号:

&& : 两端连接的是布尔表达式或者布尔值,当两个boolean都为true时,则最终表达式结果为true。只要有一个值为false,则最终结果为false。

例如:true && false -->false

|| : 两端连接的布尔值或者布尔表达式只要有一个为true,结果为true,只有两端的值同时为false,结果为false。

例如:true || false -->true
(age > 18) || (age < 60) -->任意为true

!: 在原有布尔表达式或者布尔值的结果上取反

例如: !(3 > 4) -->true

注意:&& ||也被称为"断路逻辑符号",如果第一个布尔表达式已经可以判断出最终表达式的结果,则不再运算第二个布尔表达式。

例如: (3 > 4) && (4 > 5)—>false && xxx —>false
(4 > 3) || (4 > 5)—>true || xxx —>true
(3 > 4) || (5 > 4)—>false || true —>true

    int a = 10;    
    boolean b = (a > 11) && (++ a == 11);    
    System.out.println("b = " + b);  //false    
    System.out.println("a = " + a);  //10

6、三目运算符

语法:布尔表达式 ? 表达式1 :表达式2
执行原理:如果布尔表达式为true则执行表达式1,将表达式1的结果作为整个表达式的最终结果,否则执行表达式2。

        int k = 6, j = 4;        
        System.out.println((k > j) ? 3 : 4.0);    //3.0

注意:结果类型符合之前表达式结果类型判定规则。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值