常量与变量
常量:指在程序的运行过程中,其值是不会发生改变的量。
表示方式:
A:字面值常量
整数常量:123, -45
实数常量:12.345, 56.0
字符常量:用''括起来的一个数据
'A', 'a', '1'
字符串常量:用""括起来的数据
"helloworld", "abc"
布尔常量:true, false
空常量:null
B:自定义常量
整数的三种表示形式
八进制
十进制
十六进制
进制:就是进位制,是人们规定的一种进位方法,对于任何一种进制--X进制,就表示某一个位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
字节数据是计算机表示(存储和传输)的最基本单位。
1个二进制数据被称为位。bit
1 字节 byte = 8bit
1k = 1024byte
1M = 1024K
1G = 1024M
1T = 1024G
二进制:由数字0,1组成,JDK7以后,用0b开头表示。00b1101
八进制:由数字0-7组成,用0天头表示。045
十进制:由数字0-9组成,没有任何表示
十六进制:0-9,A-F表示。用0x表示。
有符号数据的三种表示形式:原码,反码,补码。
数据是有正、负之分的。
在计算机中所有的数据都是以补码的形式存在。
给出两个数据7和-7,我们来计算:
原码:其实就是有符号数据的最基本表示形式,最高位是符号位,其它位是数据位。0表示正,1表示负。
又由于数据在计算机中都是二进制的,所以首先第一步,我们要计算出7这个十进制数据的二进制表示形式:
111
7的原码:
0 0000111
-7的原码:
1 0000111
反码:正数的反码和原码相同,负数的反码和原码不同,规则是,除去符号位,其它数值位取反,0变1,1变0。
7的反码:
0 0000111
-7的反码:
1 1111000
补码:正数的补码和原码相同,负数的补码和原码不同,规则是,反码+1.
7的补码:
0 0000111
-7的补码:
1 1111001
常量与变量
变量的概念:
内存中的一小块区域
该区域内有自己的名称(变量名)和类型(数据类型)
该区域的数据可以在同一类型范围内不断变化
为什么要定义变量:
用来不断的存放同一类型的常量,并可以重复使用。
使用变量注意:
变量的作用范围(一对{}之间有效)
初始化值
定义变量的格式:
数据类型 变量名 = 初始化值
理解:变量就如同数学中的未知数。
数据类型:
基本类型,4类8种。
整数:
byte 1
short 2
int 4
long 8
浮点:
float 4
double 8
字符:
char 2 Java 中的字符采用的的是Unicode编码。
布尔:
boolean 不明确,可以认为1一个字节。
区别:占用内存空间不一样,它们的表示数据范围也是不一样的。
单精度类型:7-8位的有效数字,定义单精度类型的时候,必须加后缀:f或者F.
双精度类型:15-16位的有效数字。
运算符:
在运算的过程中,一般要求类型一致。如果遇到不一致的情况,就会有类型转换问题。
在参与运算的过程 中:
隐式转换(从小到大)
byte, short, char -- int -- long -- float -- double
注意:long是8个字节,float是4个字节。
long是整数,float是浮点数,整数和浮点数的存储规则不一样。
long的范围是小于float的。
强制类型转换(从大小到)
如果你明确知道数据是可以表示,就可以用强制类型转换。
格式:(转换后数据类型)变量或者值
一般情况下,根本不推荐使用。在使用数据的时候,尽量使用该数据类型能够表示的范围。
Java中可以从任意基本类型转型到另外的基本类型
例外-->boolean类型不可以转换为其他的数据类型。
自动类型转换(也叫隐式类型转换)
强制类型转换(也叫显式类型转换)
转换为会默认转换和强制转换,什么时候要用强制类型转换?
表示式的数据类型自动提升:
所有的byte型、short型、和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型。
如果一个操作数是floast型,计算结果就是float型.
如果一个操作数是double型,计算结果就是double型。
面试题:
/*
b1 + b2在参与运算的时候,首先会自动转换成int类型。
在这个时候,b1和b2其实都被提升了类型。
所以,他闪的计算结果也应该是int类型。
最终,就相当于直接把int类型赋值给byte类型,所以,会有精度的损失。
如果参与运算的是常量,编译器会先计算值,在看该值是否是左边能够表示的范围。
如果是,就不报错。
*/
class VariableDemo4
{
public static void main(String []args)
{
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
byte b4 = 3 + 4;
System.out.println(b3);
System.out.println(b4);
}
}
运算符:就是把变量或者常量 进行连接的符号,一般是参与元素的符号。
算术运算符:
+、-、*、/
整数相除,结果只能是整数。
如果你想要小数,那么参与去处的数据必须有一个是浮点数类型。
%:取得余数
左边的数据大于右边,结果是余数。
左边的数据小于右边,结果是左边。
左边的数据等于右边,结果是0.
符号跟左边一致。
++、--运算符
单独使用,++或者--放在操作数据的前面或者后面效果一致。
参与运算使用:前后不一致,前,会先++/--,后,是后++/--
+号可以作为字符串连接符使用。
赋值去运算符:
把右边的数据赋值给左边的变量。
举例:int a = 10;
念法:把10赋值给左边的int类型的变量a。
面试题:
/*
虽然a+=20和a=a+20效果等价,但是还是有些区别。
+=这种赋值运算符,其实隐含了强制类型转换功能。
也就是说:
short s = 5;
s += 2;
等价于
s = (short) (s + 2);
赋值运算符的左边必须是一个变量。
5+=3;不可以。
a+=3;这是可以的。
*/
short s = 5;
s = s + 2; //报错
s += 2;
比较运算符:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
==, !=, >, >=, <, <=
表达式:用去处符连接的式式(由变量、常量组成)。
a + b 算术表达式
5 > 4 比较表达式
逻辑运算符:
用于连接结果是布尔型表达式的运算。
& 逻辑与,并且。有假则假。
| 逻辑或,或者。有真则真。
! 逻辑非,不是。针对一个表达式的操作。
以前真,现在假;以前假,现在真。
^ 逻辑异或,相同为假,不同为真。
如果从结果看,单&和双&以及单|和双|的效果一样。那么它们的区别在哪里呢?
&& 如果前面出现了false,后面将不再执行。
|| 如果前面出现了true,后面将不再执行。
&& 短路与
|| 短路或
开发常用:&&, ||, !
|