数据类型
- 强类型语言:变量的使用要严格符合规定,所有变量都必须先定义后使用。慢一些,但更安全。
- 弱类型语言:对应强类型语言,快一些,但不比强类型语言安全。
Java的数据类型
基本类型(primitive type)
单精度浮点型(float)和双精度浮点型(double)之间的区别主要是所占用的内存大小不同,float 类型占用 4 字节的内存空间,double 类型占用 8 字节的内存空间。双精度类型 double 比单精度类型 float 具有更高的精度和更大的表示范围。
Java 默认的浮点型为 double,例如,11.11 和 1.2345 都是 double 型数值。如果要说明一个 float 类型数值,就需要在其后追加字母 f 或 F,如 11.11f 和 1.2345F 都是 float 类型的常数。
String a;
System.out.println(a);//未定义,不能输出
String a=10;//String为字符串,10不能用于定义a
int num=10;
}
//整数
int num1=10;//最常用
byte num2=20;
short num3=30;
long num4=40L;//Long类型需要在数字后面加L,用于区分其他类型
//浮点数(小数)
float num5=50.1F;//float类型需在数字后加F
double num6=3.1415926;
//字符
char name=\'A\';//需加引号
//字符串,String不是关键字,是类
String name=\'弥玊生\';
//布尔型
boolean flag=ture/false
引用类型(reference)
Java有四种引用类型:强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Reference),虚引用(Phantom Reference)。4种引用的强度依次递减。
强引用:就是普通的引用,如StringBuffer sb = new StringBuffer(), 只要强引用存在,就不会被垃圾回收;
软引用:只要内存空间足够,就不会释放软引用的对象;当系统将要发生内存溢出时,才会将软引用的对象列入回收范围。
弱引用:弱引用不会影响对象的生命周期,垃圾回收器对弱引用的对象会当成普通对象处理(只要没有强引用就可以被回收)。
虚引用:虚引用不会影响对象的生命周期,无法通过虚引用获取对象实例;创建虚引用的目的是可以在对象被垃圾收集器回收时收到一个系统通知。
转义字符
所有的ASCII码都可以用" \ "加数字(一般是8进制数字)来表示. Java语言中定义了一些字母前加" \ "来表示特殊含义的字符, 如\0,\t,\n等, 称为转义字符(Escape Character).
| 符号 | 字符含义 | ASCII码值(十进制) |
|---|---|---|
| \a | 响铃 | 007 |
| \v | 垂直制表 | 011 |
| ? | 代表一个? | 063 |
| \n | 换行,将当前位置移到下一行开头 | 010 |
| \r | 回车,将当前位置移到本行开头 | 013 |
| \f | 换页符,将当前位置移到下一页开头 | 012 |
| \b | 退格,将当前位置移到前一列 | 008 |
| \0 | 空字符 | 000 |
| \t | 制表符(水平制表),跳到下一个TAB位置 | 009 |
| " | 双引号 | 034 |
| \' | 单引号 | 039 |
| \ | 反斜杠 | 092 |
| \ddd | 1~3位八进制数所代表的任意字符 | 三位八进制 |
| \xhh | 1~2位十六进制所代表的任意字符 | 二位十六进制 |
- 斜杠:"/" 与 反斜杠:"" ,此处不可互换
- \xhh 十六进制转义不限制字符个数 \'\x000000000000F\' == \'\xF\'
//转义字符
System.out.println("Hello\tWorld");//输出结果为Hello World
拓展
//整数拓展:二进制0b 十进制 八进制0 十六进制0x
int i = 10 //十进制
int i2 = 010 //八进制0
int i3 = 0x10 //十六进制0x
System.out.println(i1);//输出10
System.out.println(i2);//输出8
System.out.println(i3);//输出16
//浮点数拓展
float f = 0.1f;
double d = 1.0/10
System.out.println(f==d); //输出结果位false
float d1 = 4514136527
float d2 = d1 + 1;
System.out.println(d1==d2); //输出结果为true
//结论:浮点数具有舍入误差、有限、离散、大约、接近但不等于的特点,最好避免使用浮点数进行比较。用BigDecimal。
System.out.println(\'=============================\')//输出分割线
//字符拓展
char c1 = \'a\'
char c2 = \'中\'
System.out.println(c1) //输出结果为a
System.out.println((int)c1);//强制转换,输出结果为97
System.out.println(c2);//输出结果为中
System.out.println((int)c2);//输出结果为20013
//Unicode编码表中每个字符对应一个数字。U0000~UFFFF
char c3 = \'\u0061\'
System.out.println(c3);//输出结果为a
//布尔值拓展
boolean flag = ture;
if (flag==ture){}//等于if (flag){}