JavaSE学习笔记--常量、变量和运算符

1.常量

(1)常量:就是在程序的执行过程中其值不发生改变的量。
(2) Java中常量的分类:(1)字面值常量 (2)自定义常量
(3)字面值常量的分类:

类型范围
字符串常量用双引号括起来的内容
整数常量所有整数
小数常量所有小数
字符常量用单引号括起来的内容
布尔常量较为特殊,只有true和false
空常量null

注意:字符常量:需要用单引号,引起来的单个字符。
字符串常量:需要用双引号,引起来的单个或多个字符。

(4)Java针对整数常量提供了4种表现形式:

二进制数表示为:0B100(0B加上数字)
八进制数表示为:0100(0加上数字)
十进制数表示为:100(不用加任何前缀)
十六进制表示为:0X100(0X加上数字)

class  JinZhi{
	public static void main(String[] args) {
		//输出不同进制的数据,可以通过前缀来区分
		System.out.println(0B100);
		System.out.println(0100);
		System.out.println(100);
		System.out.println(0X100);
	}
}

在这里插入图片描述
Java会将它的十进制数值输出出来。

2.变量

2.1变量的概念

(1)变量:在程序执行的过程中,在某个范围内其值可以发生改变的量。变量其实是内存中的一小块区域。
(2)变量的定义格式:数据类型 变量名 = 变量值 ;

2.2数据类型

(1)数据类型:变量其实就是内存中的一小块区域,定义一个变量,其实就是开辟了一个内存空间。为了开辟合适大小的内存,java就给我们提供了不同的数据类型。
(2)Java中数据类型的分类:基本数据类型和引用数据类型。
(3)基本数据类型的分类:
数值型:

整数型字节数范围
byte1(8bit)-128 ~ 127
short2(16bit)-2^15 ~ 2^15 - 1
int4(32bit)-2^31 ~ 2^31 - 1
long8(64bit)-2^63 ~ 2^63 - 1
浮点数字节数范围
float4(32bit)-3.40310^38 ~ 3.40310^38
double8(64bit)-1.79810^308 ~ 1.79810^308

字符型:

字符型字节数范围
char2(16bit)2(16bit) 2(16bit)

布尔型:

布尔型字节数
boolean1

注意:

定义long类型的数据时,值后面加后缀一个L表示这个值是long类型,不加L但是这个值在int的范围内就不会报错,超过int的范围就会报错。(只要没超过int的范围就不会报错)
定义浮点型float类型的数据时,值后面必须加上后缀F表示这个值是float类型;(必须加上F)
定义字符类型的值必须是单引号引起来的单个字符。

2.3定义变量的注意事项

(1)在同一个作用域里面,不能定义同名变量。
作用域:同一个大括号所括起来的范围。
变量名的命名规则:一般都是小写。
(2)变量必须赋值才能使用。

(3)给变量重新赋值:
例如:int y=100;
byte t=y;
不能赋值
因为int是4个字节,而byte是1个字节,所以不能赋值。
反之,则可以。

3.数据类型转换

3.1数据类型转换之隐式转换

当byte short char 的数据在参与运算时,会自动提升为int类型。
如果还有long float double类型参与运算,则会相应的提升为long float double。
byte,short,char之间是互不转换的,包括byte+byte等运算也会变成int。
byte short char不参与转换 。
例如:

class bianliang 
{
	public static void main(String[] args) 
	{   byte b1 = 3, b2 = 4, b3,b4;
	    b3=b1+b2;
	    b4=3+4;
		System.out.println(b3);
		System.out.println(b4);
	}
}

注意:这段代码不能通过编译,因为b1和b2都是byte型,但是参与了运算,所以自动提升为了int型,又因为b3是byte型,不能把int型的数据赋值给byte型的变量,所以不能通过编译。
在这里插入图片描述
要想使得编译通过,就要把b3定义成int型变量。

class bianliang 
{
	public static void main(String[] args) 
	{   byte b1 = 3, b2 = 4,b4;
	    int b3;
	    b3=b1+b2;
	    b4=3+4;
		System.out.println(b3);
		System.out.println(b4);
	}
}

结果为:
在这里插入图片描述

小容量转为大容量(系统自动完成)byte,short,char --> int -->long -->float -->double

3.2数据类型转换之强制类型转换

强制类型转换,就是把数据类型强制转换成要的类型,但是有可能会发生精度损失。因为会丢弃掉多余字节,所以有可能发生精度损失问题。
强制转换的格式:目标数据类型 变量名=(目标数据类型)(被转换的数据);
如何进行强制类型转换呢?还是上面那个例子,

class bianliang 
{
	public static void main(String[] args) 
	{   byte b1 = 3, b2 = 4, b3,b4;
	    b3=b1+b2;
	    b4=3+4;
		System.out.println(b3);
		System.out.println(b4);
	}
}

这段代码不能通过编译,但是给b1+b2的结果进行强制类型转换。

class bianliang 
{
	public static void main(String[] args) 
	{   byte b1 = 3, b2 = 4,b4;
	    int b3;
	    b3=(byte)(b1+b2);
	    b4=3+4;
		System.out.println(b3);
		System.out.println(b4);
	}
}

在这里插入图片描述
此时它仍然可以通过编译。

我们可以观察到b4的结果是两个常数相加,但是它好像不受影响一样。因为有常数优化机制,当多个常量参与运算时,会把结果算出来,看这个结果在没在数据类型范围内,如果在就不报错。

3.3字符和字符串参与运算

  • 字符在参与运算时会用它的ASCII码值来参与运算。
    例如:
class zifu 
{
	public static void main(String[] args) 
	{
		System.out.println('a');
	    System.out.println('a' + 1);
	}
}

运行结果:
在这里插入图片描述
这里第二条输出语句中的字符’a’参与了运算,所以此时用它的ASCII码值来参与运算。

  • 重要的ASCII码值:
ASCII码
048
A65
B66
a97
b98
  • +加号有两个作用:一种就是充当相加作用,还有一种作用可以充当拼接符来使用
    充当拼接符来使用:当+号的运算两端,只要任意一端有字符串,就起连接符作用,把两端的内容连接起来形成一个新的字符串。
    加号运算是从左往右运算的。
    例如:
class jiahao 
{
	public static void main(String[] args) 
	{
		System.out.println("hello" + 'a' + 1);
	    System.out.println('a' + 1 + "hello");
		System.out.println("5+5="+5+5);
		System.out.println(5+5+"=5+5");
	}
}

在这里插入图片描述
解释第一个输出语句,“hello”是一个字符串,所以加号起连接作用,将两边的内容连接起来成为一个新的字符串,即为“helloa”,“helloa”又是一个字符串,所以加号起连接作用,将两边的内容又连接起来成为一个新的字符串,即为“helloa1”
解释第二个输出语句,第一个加号两端的内容都不是字符串,所以 这个加号起相加作用,由于字符在运算中用它的ASCII码值来参与运算,'a’的值为97,加上1为98;第二个加号后面的内容为字符串,所以加号起连接作用,将两边的内容又连接起来成为一个新的字符串,即为“98hello”。
第三条输出语句与第四条输出语句同理。

4.算术运算符的基本用法

运算符:算术运算符,赋值运算符,比较运算符,逻辑运算符,三元运算符,位运算符

4.1算术运算符

算术运算符:+ , - ,* , / , % , ++ , –

++和–的使用
++ --单独使用放在前面或者放在后面没有区别
例如:i++ ++i

混合使用:
++在前,先运算后使用;
++在后,先使用后运算;

例如:
int i=1;
int h=i++;
此时,i=2,h=1

int i=1;
int h=++i;
此时,i=2,h=2

4.2赋值运算符

赋值运算符:=, +=,-=,*=,/=,%=
+= 把左边和右边做加法,然后赋值给左边,其他的扩展的赋值运算符都一样。
赋值运算符要求左边的数据必须是一个变量。
扩展的赋值运算符的说明:中间不能有空格,而且结果隐含数据类型转换。
+=等,中间是不能有空格的,即不能写成 + =

+=的好处
byte f=10;//此时f是byte类型
f=f+2 //f参与运算就是int类型,不能把int类型赋值给byte类型

此时,编译会报错

byte f=10;
f+=2; //已经帮你强制进行类型转换
此时不会报错

除了这种情况其他情况等价

4.3比较、关系运算符

关系运算符,比较运算符:运算的结果只有true或false的布尔值
1)>, < ,>= ,<=, !=
2)== 判断是否相等,一定要与=赋值运算符区分开
比较运算符的表达式的结果只有两种:true或false,即结果是一个boolean值

5.原码、反码和补码

所有数字在计算机底层都以二进制形式存在。
一个数在计算机的表示形式,叫做这个数的机器数。机器数是带有符号的,在计算机用一个数的最高位存放符号,整数为0,负数为1。

原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
[+1]原 = 0000 0001
[-1]原 = 1000 0001

反码:正数的反码是其本身。
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[+1]反 = 0000 0001
[-1]反= 1111 1110

补码:正数的补码就是其本身。
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。(即在反码的基础上+1)
[+1]补 = 0000 0001
[-1]补= 1111 1111

切记:正数的原码、反码和补码相同。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值