前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基本数据类型

基本数据类型

作者头像
晚上没宵夜
发布2020-03-10 09:21:27
5460
发布2020-03-10 09:21:27
举报
文章被收录于专栏:Howl同学的学习笔记

关于java的类型,这里讲解基本类型,引用类型较复杂,分开来讲,那么开始把,基本类型有8种:

  • 整数类型:btye、short、int、long
  • 浮点类型:float、double
  • 字符类型:char
  • 布尔类型:boolean

他们占用的字节数及其默认值如下:

数据类型

字节数

默认值

byte

1

0

short

2

0

int

4

0

long

8

0

float

4

0.0

double

8

0.0

char

2

boolean

1

false

引用类型

4

null

引用类型统一4字节,存对应的地址

注意:

整形默认int、浮点默认double,所以注意使用,eg:

代码语言:javascript
复制
long a  = 10000000000;
float b = 1.2;
//上面代码都会报错的,应改为:
long a = 10000000000L;
float b = 1.2f;

创建变量,是申请内存来存储值,分配的内存只能存兼容该类型的数据,小类型主要用来节省空间

自动类型转换:

  • 不能对boolean类型转换
  • 不能把对象类型转换成不相关的对象类型
  • 大容量转小容量必须使用强转
  • 转换溢出或损失精度

隐含强制转换:

  • 整数默认int
  • 浮点默认double

浮点型损失精度:

  • 通常是差值的绝对值小于一个很小的数
    • if ( Math.abs(x - y) < 0.00001 ) //这样二者才默认相等
  • 十进制0.1转换成二进制是无限循环,保存在存储器上会截取损失精度

一个char保存一个Unicode字符,Java内存中总是用Unicode表示字符,即英中字符都是用一个char表示

四舍五入

(int)(1.2 + 0.5)

布尔的短路运算

代码语言:javascript
复制
boolean result = 2 > 1 && (1 / 0 > 0);
// 布尔运算的表达式能提前确定结果,则后续的计算不再执行,上面不报错

包装类型

Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。主要作用如下:

  • 集合不允许存放基本数据类型,用包装类作为对象就可以传入
  • 使基本类型有了属性,如最大值、最小值、所占位数等
  • 使之有了实用的对象操作,如类型转换、进制转换

JVM会自动维护八种基本类型的常量池,int常量池中初始化-128~127的范围,所以直接赋值时是相等的,而new出来是不等的

代码语言:javascript
复制
Integer i1 = 127; 
Integer i2 = 127; 
System.err.println(i1 == i2); //true

Integer i3 = new Integer(10);
Integer i4 = new Integer(10s);
System.err.println(i3 == i4); //false

赋值是有返回值的,赋什么值,就返回什么值,if()里面应该用boolean而int不能转报错

代码语言:javascript
复制
int x = 5;
int y = 10;
if(x = y)
    System.out.println(“Not equal”);
else
    System.out.println(“Equal”);

操作数都为:byte、short、int 、char,两个数都会被转换成int类型,并且结果也是int类型,但final修饰就不会向上转型了

代码语言:javascript
复制
byte b1 = 1,b2 = 3,b3;

final byte b4 = 4;

b4 = b1 + b2;

b3 = b1 + b2//报错,后者转为整形,而b3还是为byte

基本型和基本型封装型进行“==、+=”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true

代码语言:javascript
复制
int a = 220;
Integer b = 220;
System.out.println(a == b);//true

自动拆箱装箱

代码语言:javascript
复制
装箱:Integer.valueOf(int i) 返回Integer变成对象

拆箱:Integer.intValue 变成基本类型,返回int

两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true

代码语言:javascript
复制
Integer a = 1;
Integer b = 2;
Integer c = 3;
System.out.println(c.equals(a + b)); //true

Switch支持的类型:

  • 基本数据类型:int,byte,short,char
  • 基本数据类型封装类:Integer,Byte,Short,Character
  • 枚举类型:Enum(JDK 5+开始支持)
  • 字符串类型:String(JDK 7+ 开始支持)

包装类的缓存: 该缓存建立在自动装箱基础上,如果是直接new的话就不起作用,当包装类加载时内部会初始化一个缓存数组,如果数值在缓存范围内会直接返回缓存数组的对象,而不会新建对象

  • Boolean:(全部缓存)
  • Byte:(全部缓存)
  • Character(<= 127缓存)
  • Short(-128 — 127缓存)
  • Long(-128 — 127缓存)
  • Integer(-128 — 127缓存)
  • Float(没有缓存)
  • Doulbe(没有缓存)

互转:

  • 字节/字符数组 --> 字符串 new String(byte/char[] arr)
  • 字符串 --> 字节数组 getBytes()
  • 字符串 --> 字符数组 toCharArray()
  • 基本类型 --> 字符串 String.valueof()
  • 字符串 --> 基本类型 包装类.parseXXX()
  • 十进制 --> 二进制 Integer.toBinarySting(num)
  • 基本类型/字符串 --> 包装类 包装类.valueof()
  • 包装类 --> 字符串 包装类实例.toString()
  • 包装类 --> 基本类型 包装类实例.XXXValue();

初始值: 成员变量才会有初始值,局部变量必须先赋值才能编译通过

运算符:

  • &&等一对的具有短路功能,即前面能判断结果就不判断后面的
  • == 和 === 前者相对相等,1 == ‘1‘,不同类型会自动转换 ;后者绝对相等,需要类型也相等
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档