Java个人笔记-八大基本数据类型

本文详细讲解了Java中的整数、浮点数、字符和字符串类型,包括字节长度、进制转换、银行业务表示、类型转换注意事项,以及布尔值和数据溢出问题。重点介绍了类型转换在强类型语言中的应用和潜在问题。

1.整数

byte num1=10;//占1个字节码范围:-128~127
short num2=20; //占2个字节码范围:-32768~32767
int num3=30;//int类型最为常用,占4个字节码范围:-2147483648~2147483647
long num4=10L;//long类型要在数字后面加一个L,占8个字节码范围:-9223372036854775808~9223372036854775807

拓展

进制:二进制:0b 十进制 八进制:0 十六进制:0x

int i=0b10;//二进制,输出结果为0.
int i2=10;//十进制,输出结果为10.
int i3=010;//八进制,输出结果为8.
int i4=0x10;//十六进制,输出结果为16.

2.浮点数(小数)

float num5=10.1F;//float类型要在数字后面加个F
double num6=3.1415;

拓展

银行业务怎么表示钱?

以下代码用float和double进行比较:

float f=0.1f;//输出结果:0.1
double d=0.1;//输出结果:0.1
//将float和double的输出结果进行比较
System.out.println(f==d);//输出结果:flase.   why???

以下代码用两个不同值的float进行比较:

float d1=1213121231231f;
float d2=d1+1;//此处d1与d2的值有明显的的不同
//将两个float输出结果进行比较
System.out.println(d1==d2);//输出结果:true.   why???

解释:浮点数表现的字长是有限的;也是离散的,而且浮点数一般存在一个“舍入误差”,无法对数进行精确表示,所输出的结果是一个大约数(接近但不等于),所以最好完全避免使用浮点数进行比较

那么银行业务怎么表示钱?---使用一个数学工具类“BigDecimal”。


3.字符

char name='a';//char是表示字符,后面所赋的值(a)不能大于一,此处的a可以为英文字母或者中文汉字,但必须为一个。

4.字符串

String namea="你好";//String不是关键字,而是‘类’。

拓展

啥也不说,上代码!!

char c1='a';
char c2='中';
​
System.out.println(c1);//输出结果:a
System.out.println((int)c1);//(int)强制转换。输出结果:97
System.out.println(2);//输出结果:中
System.out.println((int)c2);//(int)强制转换。输出结果:20013
//所有的字符本质还是数字。
//此处涉及Unicode编码,可以处理各种语言文字,占用了2字节,最多可以65536个字符,当然现在也可以表示更多。

转义字符:\t(制表符)、\n(换行)...


5.布尔值(是or非)

boolean flag=true;
boolean flag=false;//布尔值只有这两个值

拓展

boolean flag=true;
//判断
if(flag==true);{} //等价于if(flag);{} 

注:Less is More! 代码要精简易读!

类型转换

为何要进行类型转换?

  • 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。

    低-------------------------------------->高

    byte,short,char -> int -> long -> float -> double

    注意!此处float是32bit,而long是64bit,为何float反而排在long之前呢?

    解释:因为float为浮点数(小数)类型,所以优先级大于整数类型。

    int i=128;
    //强制转换,将int类型转换为byte类型
    byte b=(byte)i;
    System.out.println(i);//输出结果:128
    System.out.println(b);//输出结果:-128
    • 上述代码 i 的输出结果没有任何问题,b的结果却完全不一样,Why?

      解释:因为byte b=(byte)i;这段代码中,byte的最大值为127,而128大于byte所能表示的最大值,会存在一个“内存溢出的问题”。所以在转换时,应尽量避免内存溢出的出现。

  • 强制转换: 格式:(类型)变量名,由高位向低位转换。

    如:int 向 bate 转换。

    自动转换:由低位向高位转换,可以直接进行转换。

    如:int 向 double 转换。

  • 注意点:

    • 不能对布尔值进行转换。

    • 不能把对象类型转换为不相干的类型

    • 在把高容量转换到低容量时,强制转换。

    • 转换的时候可能存在内存溢出问题或者精度问题!

  • 操作比较大的数字的时候,注意溢出问题!

    int money=10_0000_0000;//JDK7新特性,数字之间可以用下划线进行分割,且输出时不显示下划线。
    int years=20;
    int total=money*years;//输出值:-1474836480,输出时溢出了!
    //如果用long类型将int类型强制转换,结果如何?
    long total2=money*years;//输出值:-1474836480,因为此处的默认数据类型为int,先运行money*years再进行数据类型的转换,所以在转换之前已经存在问题了。
    //解决方法
    long tltal3=money*((long)years);//在运算前先把一个数转换为long类型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒙太奇_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值