java数据类型、数据转换以及一些坑

java数据类型、数据转换以及一些坑

基础类型

整数类型

byte占1个字节:-128~127

short占2个字节:-32768~32767

int占4个字节:-2147483648~2147483647

long占8个字节:-9223372036854775808~9223372036854775807 long类型后面要加上L long num1 = 50L

浮点类型(小数)

float占4个字节 (数字后面要加上F以区分) float num1 = 21.3F

double占8个字节(常用)

字符类型

char占2个字节

char name = ‘A’ char name1 = ‘马’ 但是 char name2 = ‘小马’ 不可以

注:所有的字符本质上还是数字,是通过Unicode编码表进行转换的,可以强制转换成int类型

在Unicode表中:‘a’=97,‘A’=65

注意:字符串String不是8大类型中的,它是单独的一个类

bool类型

占1个字节 只有true和false两个

引用类型

类 接口 数组

什么是字节:

  • 位(bit):计算机内部存储的最小单位,11111111是一个八位的二进制数

  • 字节(byte):计算机中数据处理的基本单位,一般用B来表示

  • 1B(byte,字节)=1bit(位)

  • 字符:计算机中使用的字母、数字、符号、字

  • 1bit是1位

  • 1Byte表示一个字节 1B=8b

  • 1024B = 1KB

  • 1024KB = 1M

  • 1024M = 1G

数据类型的转换

简单类型的数据进行转换时分为自动转换和强制转换。

自动转换:

由“低”转换到“高”(取值范围)

(byte、short、char)—>int---->short—>long—>float—>double

在编写程序时按照由小到大的顺序,可以直接把对应的“小”数据转换成“大”数据

byte b = 100;
int i = b;
System.out.println(i);//结果是100,自动把byte转换成int

int num1 = 100;
float f = num1;
System.out.println(f);//结果是100.0,自动把int转换成float

强制转换

由“大”转换到“小”时(取值范围),但是可能会有内存溢出和精度丢失问题

int i = 129;
byte b = (byte)i;//数据由“高”到“低”要进行强制转换
System.out.println(b);//结果是-127 因为byte类型范围是-128~127,而129超出范围,内存溢出。

float f1 = 12.34f;
int num1 = (int)f1;//数据由“高”到“低”要进行强制转换
System.out.println(num1);//结果是12,因为精度丢失,只取其整数部分12
float f2 = -12.34f;
int num2 = (int)f2;
System.out.println(num2);//结果为-12,精度丢失,取整数部分-12
int num1 = 1000000000;//10亿
int num2 = 20;
int num3 = num1 * num2;
System.out.println(num3);//结果是-1474836480,因为int范围是-2147483648~2147483647,大概是20亿左右,而结果大概是200亿,内存溢出
float f = num1 * num2;
System.out.println(f);//结果也是-1.47483648E9,一样的结果,因为num1与num2运算结束后已经溢出了,只不过是把溢出的结果交给float
float f1 = num1 * (float)num2;
System.out.println(f1)//结果是2.0E10,表示200亿。

char本质还是整数类型,所以可以与数字进行数学运算

char c = 'a';
int num = c + 1;
System.out.println(num);//结果是98,因为‘a’对应Unicode表是97, ‘a’+1则为98
System.out.println((char)num);//结果是‘b',98对应Unicode表是'b'

进制

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

int i1 = 0b10;//二进制  结果是2
int i2 = 010;//八进制 结果是8
int 13 = 10;//十进制  结果是10
int i4 = 0x10;//十六进制  结果是16

浮点数的坑

float f = 1.1f;
double d = 11.0/10;
System.out.println(f);//结果1.1
System.out.println(d);//结果是1.1
System.out.println(f == d);//结果是false


float f1 = 23123123132132f;
float f2 = f1 + 1;
System.out.println(f1 == f2);//结果是true  f1与f2相差了1,但结果竟然是俩值相等

float是有限的离散的,对于它的数值是会进行舍入误差,是接近但不等于,所以不能对浮点数进行判断

对于一些大数据(银行等业务),不要用float double等,用BigDecimal类

string类型的坑

String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2);//结果是true

String s3 = new String("hello");
String s4 = new String("hello");
System.out.println(s3 == s4);//结果是false

所得

一个位b是一个二进制数字(0或者1),一个字节是8个二进制数,而计算机存储或者读取一个字节代表着读或者写入8个二进制数。对应后续的IO流中的字节流和字符流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值