概述
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)基本数据类型的分类:
数值型:
整数型 | 字节数 | 范围 |
---|---|---|
byte | 1(8bit) | -128 ~ 127 |
short | 2(16bit) | -2^15 ~ 2^15 - 1 |
int | 4(32bit) | -2^31 ~ 2^31 - 1 |
long | 8(64bit) | -2^63 ~ 2^63 - 1 |
浮点数 | 字节数 | 范围 |
---|---|---|
float | 4(32bit) | -3.40310^38 ~ 3.40310^38 |
double | 8(64bit) | -1.79810^308 ~ 1.79810^308 |
字符型:
字符型 | 字节数 | 范围 |
---|---|---|
char | 2(16bit) | 2(16bit) 2(16bit) |
布尔型:
布尔型 | 字节数 |
---|---|
boolean | 1 |
注意:
定义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码 | 值 |
---|---|
0 | 48 |
A | 65 |
B | 66 |
a | 97 |
b | 98 |
- +加号有两个作用:一种就是充当相加作用,还有一种作用可以充当拼接符来使用
充当拼接符来使用:当+号的运算两端,只要任意一端有字符串,就起连接符作用,把两端的内容连接起来形成一个新的字符串。
加号运算是从左往右运算的。
例如:
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
切记:正数的原码、反码和补码相同。
最后
以上就是高高可乐为你收集整理的JavaSE学习笔记--常量、变量和运算符1.常量2.变量3.数据类型转换4.算术运算符的基本用法5.原码、反码和补码的全部内容,希望文章能够帮你解决JavaSE学习笔记--常量、变量和运算符1.常量2.变量3.数据类型转换4.算术运算符的基本用法5.原码、反码和补码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复