常量
常量就是不可改变的数值
大概分为以下六种:
1.整数常量。包括所有整数
对于整数有四种表现形式:
二进制,0、1,满2进1
八进制,0-7,满8进1,从0开头表示
十进制,0-9,满10进1
十六进制,0-9,A-F,满16进1,用0x开头表示。
2.小数常量。包括所有小数
3.布尔常量。较为特有,只有两个数值,true false, true false同时是关键字
4.字符常量。将一个数字字母或符号用单引号(‘’)标识,“单引号里只能放单个数字,字母,符号,一个也没 有不可以”
5.字符串常量。将一个或多个字符用双引号("")标识
6.null常量。只有一个数值就是null
不同进制的表现形式
二进制的数据表现形式:二进制加0b
八进制的数据表现形式:八进制加0
十进制的数据表现形式:十进制无标示
十六进制的数据表现形式:十六进制加0x,x不分大小写。10到15分别用a到f表示,不分大小写
任意进制到十进制的转换
“系数*基数^权次幂”
十进制 10
二进制 2
八进制 8
十六进制 16
例:十进制转十进制:
12345=1*10^4+2*10^3+3*10^2+4*10^1+5*10^0
=10000+2000+300+40+5
=12345
十进制到任意进制的转换
“除积到取余”
十进制 10
二进制 2
八进制 8
十六进制 16
例: 37 除10=3余7
3再除10=0余3
所以为37
37 除2=18余1
18再除2=9余0
9再除2=4余1
4再除2=2余0
2再除2=1余0
1再除2=0余1
所以为100101
8421码
1 1 1 1 1 1 1 1
1*2^7 1*2^6 1*2^5 1*2^4 1*2^3 1*2^2 1*2^1 1*2^0
128 64 32 16 8 4 2 1
变量
内存中的一个存储区域
该区域有自己的名称(变量名)和类型(数据类型)
该区域的数据可以在同一类型范围内不断变化
用来不断存放同一类型的常量,并可以重复使用
数据类型 变量名=初始化值
变量的作用范围(一对{}之间有效)
数据类型
分为基本数据类型和引用数据类型
基本数据类型:分为四类八种
byte 占1个字节,取值范围是—128到+127
short 占2个字节,取值范围是—2^15到+2^15+1
int 占4个字节,取值范围是—2^31到+2^31+1,整数默认数据类型
long 占8个字节,取值范围是—2^63到+2^63+1
float 占4个字节,单精度,没有指定大小
double占8个字节,双精度,浮点型默认数据类型
char 占2个字节,取值范围是0到65535
boolean占八分之一个字节只有true和false
引用数据类型:
接口和数组
练习
class Demo1 {
public static void main(String[] args) {
byte b=100;
short s=1000;
int i=10000;
long l=1234567890000L;//如果long的值大于int范围必须在数值结尾加L,注意尽量大写,否则容易看成数字1
//浮点类型
float f=11.2f;//此处数值后如不加f(不分大小写),会报错,因为小数数据类型默认为double,所以会损失精度
double d=11.2;
//字符类型
char c1='a';
char c2='0';
char c3='中';//字符中可以储存有汉字,因为Java是unicode编码,char占用两个字节,而汉字也是两个字节
//布尔类型
boolean b1=true;
boolean b2=false;
//System.out.println(l);
}
}
使用变量注意事项
class Demo2 {
public static void main(String[] args) {
int i=10;
i=20; //这是一个赋值动作,可以把初始化值覆盖掉
System.out.println(i);
int x; //变量使用前必须赋值,
System.out.println(x);
int a,b,c; //一条语句可以声明多个变量
a=10;
b=20;
c=30;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
自动类型提升与强制类型转换
class Demo3 {
public static void main(String[] args) {
/*int i=100;
byte b=30; //自动类型提升(隐式转换)
i=i+b;
System.out.println(i);*/
int i=100;
byte b=50;
b=(byte)(i+b); //强制类型转换
System.out.println(b);
}
}
变量相加与常量相加的区别
class Demo4 {
public static void main(String[] args) {
byte b,b1,b2;
b1=3;
b2=4;
b=b1+b2; //此处报错,原因是b1,b2 是byte类型变量,在运算中自动提升为int类型,
//因为b1,b2变量原因,Java无法获取其具体值
1b=3+4; //3,4是两个常数,Java有一个常数优化机制,在编译时直接将常数相加结果算出并赋值
//问这两种编译哪种会报错?
System.out.println(b);
}
}
数据类型转换之默认转换
byte,short,char -- int -- long -- float -- double
float和long它们底层的存储结构不同。
float表示的数据范围比long的范围要大
long:2^63-1
float:3.4 *10^38 > 2*10^38 > 2 *8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
字符char可以存储一个中文汉字吗?为什么呢?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。
所以,Java中的字符可以存储一个中文汉字
字符和字符串参与运算
'0'--------48
'a'--------97
'A'--------65
class Demo5 {
public static void main(String[] args) {
System.out.println("Hello World!"+'a'+1);//任何数据用+和字符串相连接,会产生新的字符串
}
}