java基础语法学习01
数据类型拓展
整数拓展
//整数拓展: 进制
二进制0b
八进制0
十进制
十六进制0x
int i = 10;
int i2 = 010;//八进制0
int i3 = 0x10;//十六进制0x 0~9 A~F 16
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
输出结果

浮点数拓展
- 最好完全避免使用浮点数进行比较,而要通过BigDecimal来比较
//浮点数拓展 银行业务如何表示?
// float 有限 离散 舍入误差 大约 接近但不等于
// double
//BigDecimal 数学工具类
//最好完全避免使用浮点数进行比较
//最好完全避免使用浮点数进行比较
//不要用float和double进行浮点数比较,而要通过BigDecimal来比较
典型问题
float f = 0.1f;//0.1
double d = 1.0/10;//0.1
System.out.println(f==d);//该语句用来判断f与d是否相等,结果为false,为什么?
System.out.println(f);
System.out.println(d);
System.out.println("=========================");
float a1 = 261548512;
float a2 = a1 + 1;
System.out.println(a1==a2);//true 为什么?
System.out.println("=========================");
输出结果

输出结果相同,但是并不相等。
字符拓展
-
所有的字符本质还是数字,通过Unicode的编码方式,将字符编译为数字,每个字符都一一对应。
-
以'\u0061','\u0068',十六进制数,这种形式编码,编码范围U0000~UFFFF
//字符拓展
char b1 = 'a';
char b2 = '中';
System.out.println(b1);
System.out.println((int)b1);//强制转换,将char类型转换为int类型
System.out.println(b2);
System.out.println((int)b2);//强制转换,将char类型转换为int类型
//所有的字符本质还是数字
//编码方式 Unicode 2字节 长度0~65536
char b3 = '\u0061';
System.out.println(b3);//输出的是a?
输出结果

-
这里字符'a'输出数字为97,97转化为十六进制数为61,于是由编码\u0061就可以输出字符'a'
-
字符'中'输出数字为20013,20013转化为十六进制数为4E2D,于是由编码\u4E2D就可以输出字符'中'
char b4 = '\u4E2D';
System.out.println(b4);//输出为'中'
转义字符
- 字母前面加上捺斜线\来表示常见的那些不能显示的ASCII字符,称为转义字符。如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
| 转义字符 | 意义 | ASCII码值(十进制) |
|---|---|---|
| \a | 响铃(BEL) | 007 |
| \b | 退格(BS) ,将当前位置移到前一列 | 008 |
| \f | 换页(FF),将当前位置移到下页开头 | 012 |
| \n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
| \r | 回车(CR) ,将当前位置移到本行开头 | 013 |
| \t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
| \v | 垂直制表(VT) | 011 |
| \ | 代表一个反斜线字符''' | 092 |
| ' | 代表一个单引号(撇号)字符 | 039 |
| " | 代表一个双引号字符 | 034 |
| \0 | 空字符(NULL) | 000 |
| \ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
| \xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
//转义字符
// \t 制表符
// \n 换行
//...
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
输出结果

拓展知识--从内存来分析对象
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa==sb);//false
String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd);//true
//对象 从内存分析
输出结果

布尔值拓展
//布尔值拓展
boolean flag = true;
if (flag==true){}//新手
if (flag){}//老手
//代码要精简易读
类型转换
-
由于Java是强类型语言,在进行运算的时候需要进行类型转换
-
必须将两个变量转换为同一格式,才能进行比较
//优先级 byte,short,char->int->long->float->double
byte 1个字节
short 2个字节
char 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节
//小数的优先级是要比整数高的
转换格式
//强制转换 (类型)变量名 从高到低
//自动转换 从低到高,不需要强制转换
//优先级 byte,short,char->int->long->float->double
典型案例1
int a = 128;
byte c = (byte)a;
//必须将两个变量转换为同一格式,将a的高等级的int转换为低等级的byte,才能进行比较
double d = a; //double的优先级比a的int类型优先级高,从低到高自动转换
System.out.println(a);
System.out.println(c);//内存溢出,显示-128,byte的范围-128~127,超出内存
System.out.println(d);//double为小数类型,显示128.0
输出结果

典型案例2
char e ='a';
int f = e+1; //自动转换
System.out.println(f); //字符a编码对应97,输出f为98
System.out.println((char)f); //将int类型的f整数(f=98)转换为char类型的f(98对应字符b)
输出结果

注意点
- 不能对布尔值进行转换
- 不能将对象类型转换为不相干的类型
- 从高到低,强制转换;从低到高,自动转换
- 转换的时候可能存在内存溢出和精度问题
典型案例3
System.out.println((int)30.8);//30
System.out.println((int)-45.8f);//45
//30.5和-45.8f都为小数,转换为int整数后,会成为整数,出现精度问题
输出结果

典型案例4
public class demo05 {
public static void main(String[] args) {
//操作比较大的数时,注意溢出问题
//数字之间可以用下划线分割,并不影响输出结果
int money = 10_0000_0000;
int year = 20;
int total = money*year;
long total2 = money*year;
//money*year是int类型,已经输出溢出,再转换为long类型,为时已晚
//在long类型里的数字,后面要加上大写的L
long total3 = money*((long)year); //先将year转换为long类型,就不会输出溢出
System.out.println(total); //计算溢出
System.out.println(total2); //依旧计算溢出
System.out.println(total3); //计算成功
//还可以直接在输出语句中进行类型转换,不需要先定义total2类型
System.out.println(money*((long)year)); //计算成功
}
}
输出结果


浙公网安备 33010602011771号