失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java_Day2 变量 基本数据类型 运算符

Java_Day2 变量 基本数据类型 运算符

时间:2022-07-04 18:05:52

相关推荐

Java_Day2 变量 基本数据类型 运算符

Day02

变量

常量是固定不变的值,变量是可以变化的

定义变量:

​ 数据类型、变量、数据值

​ 注意:

float b = 3.4f;long c = 12l;// 当我们定义一个float类型的变量时,数据值后必须加F//当我们定义的值是long类型时,数据值后建议加上L

​ 变量名称:在同一个大括号内,变量的名字不可相同

​ 如果使用byte或者short类型的变量,那么右侧的数据值不能超过左测类型的范围

​ 变量赋值:定义变量,必须赋值

​ 变量使用不能超出作用域的范围,即打印输出的语句不能在创建变量之前

数据类型

在java中分为两类:

​ 基本类型:整型、浮点数、字符、布尔

​ 引用类型:类、接口、数组等

基本数据类型(重点)

八种基本类型:

字节型:byte 1字节 -128——127

短整型:short 2字节 -32768——32767

整型:int(默认) 4字节 -231——231-1

长整型:long 8字节 263——263-1

单精度浮点型:float 4字节

双精度浮点型:double(默认) 8字节

字符型:char 2字节 0——65535

布尔类型:boolean 1字节 ture,false

**默认类型:**整型类型默认int,浮点类型默认double

数据类型的转换

java程序中要求参与数据计算时,数据类型必须一致,如不一致,会发生自动类型转换

自动转换:

​ 将范围小的自动提升为取值范围大的。

转换规则:

范围小的类型转换为范围大的类型:

byte、short、char运算的时候都会自动提升为int类型

强制转换:

​ 将范围大的值赋值给范围小的值的时候,需要强制转换

public class HelloWorld{public static void main(String[] args){short s = 1;s=(short)(s+1);}}

强转是大范围转换成小范围,很可能会造成精度损失

还要注意的是,在转换前,如果是字节、短整、整、长整的计算,最后都会先转换成整型(参考自动转换),比如

public class HelloWorld{public static void main(String[] args){short s = 1;//不报错但是很可能精度损失s=s+s;//这是两个短整相加,但是他们相加后会自动转换成整型,正确写法是s=(short)(s+s);}}

public class HelloWorld{public static void main(String[] args){byte b=2;byte c=2;byte d=b+c;//这是错误的//正确的是byte d= (byte)(b+c);}}

和上面同理!

**注意:**强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出(超出左边类型,会溢出或者反向溢出)

ACSII表

在计算机内部只认识二进制0和1的数据,如何让计算机可以识别我们的人类的文字?这就产生了一个表

就是将人类的文字和一个十进制数的对应起来的一张表

一般用到的是数字、大小写,可简单记忆0、A、a的acsII值

在char类型和int类型运算时,char类型的字符会先查询ascII表,获得相对应得数据,再运算。

运算符

+加法运算,字符串的拼接

-减法运算

*乘法运算

/除法运算

%取余运算

++自增,–自减

**注意:**在java中,整数使用以上运算符,无论如何运算,得出的结果肯定是整数,不会得出小数

public class HelloWorld{public static void main(String[] args){int i = 1234;System.out.println(i/1000*1000);//输出结果为1000}}

++自增运算

独立运算

变量在独立运算时,i++和++i一样

混合运算

和其他变量放在一起,i++和++i就不一样

public class HelloWorld{public static void main(String[] args){int i = 1;int b = i++;System.out.println(b);System.out.println(i);//输出结果为:1 2}}

public class HelloWorld{public static void main(String[] args){int i = 1;int b = ++i;System.out.println(b);System.out.println(i);//输出结果为:2 2}}

关于++自增的练习题

public class HelloWorld{public static void main(String[] args){int a = 2;int b = (3 * a++) +a;System.out.println(b);//第一个a是先运算再自增,所以是3*2,第二个a是已经自增后的a,b最终为(3*2)+3System.out.println(a);//结果为9 3}}

public class HelloWorld{public static void main(String[] args){int i = 1;int j = 1;int k = i++ + ++i+ ++j+j++;System.out.println(i);//第一个i先运算再自加,此时i为1,k也为1;第二个i先自增后相加,此时i为3(分号前第一个i自增了,为2,在这个基础上i自增),k此时为4System.out.println(j);//j差不多System.out.println(k);//结果为3 3 8}}

+符号

+符号在遇到字符串时,表示的是拼接的含义

例如:“a”+“b"运算结果是"ab”

public class HelloWorld{public static void main(String[] args){System.out.println("5+5="+5+5);//输出结果为5+5=55,此处除双引号内的"+",其他+都表示拼接}}

赋值运算符

= 赋值

+= 加等于 s+=1 -------s=s+1

-= 减等于

*= 乘等于

/= 除等于

%= 取模等

对于+=

public class text{public static void main(String[] args){byte a = 4;a += 1;//底层会帮我们自动类型转换a = a+1;//报错,需要手动强转System.out.println(a);}}

比较运算符

== 比较符号两边数据相等,结果返回true;

< ,<= 比较符号左边小于右边为true;(有等号是小于等于)

,> ,>= 比较符号右边小于左边为true;(有等号是……)

比较运算符中,只要两个结果,要不是true,要不是false

!= 表示不等,如果符号两边数据不等,结果为true

逻辑运算符

&& 逻辑与,要求两表达式皆为true时才为true

一边为false,结果为false

**短路特点:**符号左边如果是false,右边将不会计算

|| 逻辑或,当两个表达式中有一个为true时才为true

两表达式都为false,那么结果也为false

**短路特点:**符号左边为true时,右边将不会计算

! 逻辑非,如果布尔类型的表达式为ture,加!后整个式子结果为false.

三元运算符

数据类型 变量名=布尔类型表达式? 结果1:结果2;

如果布尔类型表达式结果是true,结果为1,表达式结果为false,结果为2

方法入门

概念:对于一些复杂的代码逻辑,如果希望重复使用这些代码,并且做到随时任意使用,那么就可以将这些代码放在一个大括号“{}”当中

方法:就是将一个功能提取出来,把代码单独写在一个大括号内,形成的一个独立的功能,使用这些代码时,直接找到名字(方法名)调用即可。

方法的定义:

权限修饰符 返回值类型 方法名(参数列表){

​ 代码;

}

修饰符:目前的固定写法是public static

返回值类型:目前固定写法void

**方法名:**为了我们方法定义的一个名字,只要符合标识符规则就行

**参数列表:**目前无参

**return:**方法结束,因为返回值为void,retuen可以不写。

注意事项

方法定义时,必须定义在类中,且不能定义在另一个方法中(不能嵌套方法)

扩展的知识:

public class Demo {//程序的入口public static void main(String[] args) {short s=1;s+=1;//s=s+1;System.out.println(s);}}

s+=1逻辑上是可以看做s=s+1,但计算结果被提升为int类型,再向short类型赋值会报错,因为我们的大范围的类型给小范围赋值会报错,但是s+=1只进行一次运算,并且它只带强制转换的功能。

常量和变量的运算问题:

public class Demo {//程序的入口public static void main(String[] args) {byte s=1;byte s1=2;byte s2=1+2;//byte s3=s+s1;

注意点:s2=1+2,1和2都是常量,为固定不变的值,在编译的时候,我们的编译器已经确定1+2的结果,它判断出来并没有超过我们的byte类型的范围,所以可以成功复制。

而我们的s3=s+s1,这个是我们两个byte类型运算,先转换为我们的int类型,再计算,然后赋值我们的byte,所以会报错,大范围不能直接赋值给小范围。

如果觉得《Java_Day2 变量 基本数据类型 运算符》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。