随机名言

基本数据类型



关于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:

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)


布尔的短路运算

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

包装类型

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

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

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

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不能转报错

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修饰就不会向上转型了

byte b1 = 1,b2 = 3,b3;

final byte b4 = 4;

b4 = b1 + b2;

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

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

int a = 220;
Integer b = 220;
System.out.println(a == b);//true

自动拆箱装箱

装箱:Integer.valueOf(int i) 返回Integer变成对象

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

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

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‘,不同类型会自动转换 ;后者绝对相等,需要类型也相等

posted @ 2020-02-02 09:29  Howlet  阅读(180)  评论(0编辑  收藏  举报

Copyright © By Howl