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)

输出结果

注意点

  1. 不能对布尔值进行转换
  2. 不能将对象类型转换为不相干的类型
  3. 从高到低,强制转换;从低到高,自动转换
  4. 转换的时候可能存在内存溢出和精度问题

典型案例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));   //计算成功
        
    }
}

输出结果

posted @ 2021-03-03 21:01  一口不多  阅读(86)  评论(0)    收藏  举报