Java基础数据类型和运算符

标识符

标识符是赋给类、方法、变量……的名字
一个标识符可以是字母、数字、下划线、美元符号的任意顺序组合,但不能以一个数字开始,也不能是关键字。
注:Java是区分大小写的,Student和student是不一样的
由于Java采用的Unicode编码,所以中文也算是字母,但是并不建议用中文做标识符

	int 中文 = 5;
	System.out.println(中文); // 输出5

关键字

关键字是Java里事先定义好并赋予特殊含义的单词,也被称为保留字,标识符不能和关键字冲突。
在这里插入图片描述
注意:main不是关键字

常量

常量就是在程序中固定不变的值,是不能改变的数据。例如数字1,字符‘a’,浮点数3.2等。在Java中,常量包括整型常量、浮点数常量、布尔常量、字符常量等等。

1.整型常量

整型常量是整数类型的数据,有二进制,八进制,十进制和十六进制四种表示形式:

  • 二进制:由数字0和1组成的数字序列,前面要以0b或0B开头,目的是为了和十进制进行区分,如0b01101100,0B10110101
  • 八进制:以0开头并且其后由0~7范围内(包含0和7)的整数组成的数字序列,如0342。
  • 十进制:由数字0~9范围内(包含0和9)的整数组成的数字序列,如198。
  • 十六进制:以0x或0X开头并且其后由0-9,A-F(包含端点)组成的数字序列,如0X25AF

注意:在程序中为了标明不同的进制,数据都有上述的特定标识,必须遵守。

2.浮点数常量

浮点数常量就是在数学中用到的小数,分为float单精度浮点数double双精度浮点数两种类型。其中,单精度浮点数后面以F或f结尾,双精度浮点数后面以D或d结尾。当然,也可以不加任何的后缀,此时Java虚拟机会默认为double双精度浮点数。

3.字符常量

字符常量用于表示一个字符,它可以是英文字母,数字,标点符号以及转义序列来表示的特殊字符。

	'a' '1' '&' '\r' '\u0000'

4.字符串常量

字符串常量用于表示一串连续的字符。

	"Hello World" "123" "Welcome \n XXX"  ""

5.布尔常量

布尔常量即布尔型的两个值truefalse,该常量用于区分一个事物的真与假

6.null常量

null常量只有一个值null,表示对象的引用为空。

变量

变量的定义

在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名内存单元中存储的数据就是变量的值

变量的数据类型

在JAVA中的变量数据类型分为两种:基本数据类型引用数据类型
在这里插入图片描述
此图从这篇博客转载而来

操作误区
定义一个long变量时,如果用常量给他赋值,并且这个常量的值超过了int的范围,则一定要在这个常量后面加一个L或者l。

	long val = 9999999999999L;

定义一个float变量时,如果用常量给他赋值,并且这个常量是小数,则必须在这个常量后面加个f或者F,因为小数会被默认为double类型的值。

	float val = 1.2f;

定义一个boolean变量,只能用true或者false给他赋值,并不能用0或1去赋值。

	boolean flag = true; // 正确
	boolean flag = 1; // 错误

变量类型的转换

1.自动类型转换

自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。
他需要两个条件:第一,两种数据类型彼此兼容;第二,目标类型的取值范围大于源类型的取值范围目标类型可以类比成水桶,源类型可以类比成水杯
举例:

	byte b = 3;
	int a = b; // 程序把byte类型的b自动转换成了int类型,无须特殊声明

下面列举三种可以进行自动类型转换的情况:

  • 整数类型之间可以实现转换,低取值范围的向高取值范围转换
  • 整数类型可以转换成float类型。
  • 其他类型可以转换成double类型。

2.强制类型转换

强制类型转换也叫显式类型转换,指的是两种数据类型之间需要进行显式地声明。
当两种类型彼此不兼容,或者目标类型的取值范围小于源类型时,自动类型转换无法进行,这时就需要强制类型转换。

	目标类型 变量名 = (目标类型) 值;
	byte b = (byte) num;

注意:在对变量进行强制类型转换时,会发生取值范围较大的数据类型向取值范围较小的数据类型的转换,如将一个int类型的数转换成byte类型,这样极其容易造成数据精度的丢失。因为两者的取值范围不同,所以小范围的数据类型会截断大范围的数据类型,造成精度丢失。
举例:

	int a = 128;
	byte b = (byte) a;
	System.out.println(b); // 输出-128,精度丢失,具体原理:自行写出他们的二进制表示即可理解

3.表达式类型的自动提升

所谓表达式是指由变量和运算符组成的一个算式,变量在表达式中进行运算时,也有可能发生自动类型转换,这就是表达式数据类型的自动提升,如一个byte型的变量在运算期间类型会自动提升为int型。

	byte b1 = 3;
	byte b2 = 4;
	byte b = b1 + b2; // 此时报错,因为在运算期间,变量b1和变量b2都被提升为了int型,直接赋值就会出错
	byte b = (byte) (b1 + b2); // 此时成功 

运算符

理解一个点,其他的和c++一样,不再赘述。
| 或,|| 短路或,& 与,&&短路与

  • | 或:无论左式的真假性,都要计算运算符两边的表达式
  • || 短路或:当左式时,就判断整个式子为真,不再计算判断右式
  • & 与:无论左式的真假性,都要计算运算符两边的表达式
  • && 短路与:当左式时,就判断整个式子为假,不再计算判断右式

举例:

	int x = 0, y = 0, z = 0;
	boolean flag1, flag2;
	flag1 = x > 0 & y++ > 0; // 最终y的值为1,因为右式计算判断过了
	flag2 = x > 0 && z++ > 0; // 最终z的值为0,因为右式没有计算判断过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jegret

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值