目录
一、变量的定义和作用域
定义格式:数据类型 变量名
作用域:一对{ }之间有效
注:使用前需要初始化值
二、数据类型
分为引用数据类型和基本数据类型
引用数据类型 | 类(包括字符串String) |
接口 | |
数组 |
类型 | 符号 | 所占字节 | 数据范围 | ||
基本数据类型(8种) | 数值型 | 整数 | byte | 1 | -128~127(-2^7~2^7-1) |
short | 2 | -2^15~2^15-1 | |||
int | 4 | -2^31~2^31-1 | |||
long | 8 | -2^63~2^63-1 | |||
浮点数 | float | 4 | -3.403E38~3.403E38 | ||
double | 8 | -1.798E308~- 4.9E324 | |||
字符型 | char | 2 | |||
布尔型 | boolean | 1 | true false(java中不能以0或非0代替) |
下面详细介绍8种基本数据类型
1、整数型
byte、short、int、long,它们分别占1、2、4、8个字节,1个字节为8位
java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
2、浮点类型
float、double
Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’
浮点型常量有两种表示形式:
十进制数形式:如:5.12 512.0f .512 (必须有小数点)
科学计数法形式:如:5.12e2 512E2 100E-2
3、字符型
char类型是可以进行运算的。因为它都对应有Unicode码。
在用于计算的时候会自动转化为int类型。
Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n’表示换行符
4、布尔型
boolean类型数据只允许取值true和false,无null。默认初值是false
不可以0或非 0 的整数替代false和true,这点和C语言不同。
5、AScii码和Unicode码
Ascii码是计算机发明的时候为了在计算机中表示字符,人们制定的一种编码。Ascii由一个字节中的7位bit位表示,范围是0x00-0x7F共128个字符,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)
扩展ASCII,后来基于ascii表扩展的,共256个字符,比如说法语德语类的语言,有特殊字母。
UNICODE,再后来为了把全世界人民所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集。Unicode 只是一个符号集,它只规定了符号的二进制代码,UNICODE使用两个字节表示一个字符。UNICODE的范围是0x0000-0xFFFF共6万多个字符,其中光是汉字就占用了四万多个。
UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。
6、String类
String类属于引用类型,可用null赋值。
String对象创建出来就不可能被改变,每次复制都需要创建新的对象
7、基本数据类型转化
自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为
①有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
②byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
③当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。byte和short涉及到赋值都会转换,但是特殊运送不会
8、强制类型转换
①自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符,例如(int),但可能造成精度降低或溢出,格外要注意。
②通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
如: String a = “43”; int i = Integer.parseInt(a);
boolean类型不可以转换为其它的基本数据类型。
char、byte、short之间不相互转换,涉及到运算转换成int,转成int不会自动转回来
9、自动装箱、拆箱
因为基本数据类型无法进行对象化处理,所以引入了包装类,8种基本数据类型都有对应的包装类,包装类提供了一些属性和方法,Java中数值型包装类都是继承自Number类,都是用final修饰的,不可以继承
装箱就是自动将基本数据转换成包装类型
拆箱就是 自动将包装器类型转换为基本数据类型。
//自动装箱
Integer b = a;//相当于 Integer b = Integer.valueOf(a);
//自动拆箱
int c = b;//相当于 int c = b.intValue();
如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象
Integer i = 12;
Integer j = 12;
System.out.println("============0=========");
System.out.println(i==j);
Integer ii = 129;
Integer jj = 129;
System.out.println("============1=========");
System.out.println(ii==jj);
Integer iii = new Integer(12);
Integer jjj = new Integer(12);
System.out.println("============2=========");
System.out.println(iii==jjj);
int aa = 12;
Integer bb = new Integer(12);
System.out.println("============3=========");
System.out.println(aa==bb);
Integer dd = new Integer(129);
int cc = 129;
System.out.println("============4=========");
System.out.println(dd==cc);
输出结果是
============0=========
true
============1=========
false
============2=========
false
============3=========
true============4=========
true
0是自动装箱,会发生Integer i = Integer.valueOf(12),因为两个12都存在常量池中,都直接从常量池里面取相同的12,不会重复创建对象,所以是true
1是false,也是自动装箱,但是因为>127,所以不在常量池里拿,而是在堆上new新的Integer对象
2是false不用说了,堆上创建了两个新对象
3是true,一个是基本类型一个包装类型,他们相比较,身为包装类型的bb会发生自动拆箱的过程。即调用intValue()方法返回一个int类型,基本类型就是只比较数值,所以输出true
4同3,只是故意不取-128到127之间的数据来说明跟2不一样
10、基本数据类型和String类型互相转换
(1)基本数据类型转换成String
- 基本类型数据的值+"" 最简单的方式(工作中常用)
- 使用包装类中的静态方法 static String toString(int i)返回-一个表示指定整数的String 对象。
- .使用String类中的静态方法 static String value0f(int i) 返回int 参数的字符串表示形式。
(2)String转换成基本数据类型
- 使用包装类的静态方法XX.parseXX( "字符串") ,eg: Integer.parseInt("123")
- 使用包装类的静态方法valueOf( "字符串"),eg:Double.valueOf("123")
三、运算符
①位运算符
②算术运算符
③赋值运算符
④比较运算符(关系运算符)
⑤逻辑运算符
⑥三元运算符
1、位运算符
<<、>>、>>>、&、|、^、~
2、算术运算符
注:i++的效率比i=i+1高
字符串也可使用+
“+”除字符串相加功能外,还能把非字符串转换成字符串,比如:
System.out.println("5+5="+5+5);
打印结果是:
5+5=55
但是如果数值在前面,则先进行算术运算,再拼接字符串,比如
System.out.println(5+5+"=10");
打印结果是:
10=10
3、赋值运算符
=
4、比较运算符
5、逻辑运算符
(1)异或^
a^b:不同为true,相同为false
(2) “&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
6、三元运算符
(条件表达式)?表达式1:表达式2
条件表达式为true的时候,执行表达式1,为false则执行表达式2