Java基础 —— 原生数据类型与包装类
来源:互联网 发布:诛仙手游破凶辅助软件 编辑:程序博客网 时间:2024/05/16 14:08
原生数据类型
Java共有八个原生数据类型,按各自类型分类如下:
整型:byte, short, int, long;
浮点型:double, float;
字符型:char;
布尔型:boolean
变量定义
在定义变量时,整型默认为 int,浮点型默认为 double。因此,在定义较大long类型变量时应在数据末尾+L
long a = 1; //编译正常long a = 5,000,000,000; //编译报错,The literal 50000000000 of type int is out of rangelong a = 5,000,000,000L; //编译正常
同时,在定义带小数的 float 类型变量时应在数据末尾+F
float a = 1; //编译正常float a = 1.0; //编译报错,Type mismatch: cannot convert from double to floatfloat a = 1.0F; //编译正常
类型转换
原生数据类型有两种转换方式,自动类型转换和强制类型转换。
自动类型转换由编译器自动完成,不需要添加代码,也称隐式类型转换。此种转换方式只使用于变量由存储范围小的类型转换向存储范围大的类型转换,即 byte → short(char)→ int → long → float → double,如果想要由大至小的转换则需使用强制类型转换,否则报错,如在定义 float 类型变量时数据末尾未+F。
强制类型转换需要添加代码实现,也称显式类型转换。此种转换方式一般用于对变量进行由大至小的转换,因此存在数据精度丢失的问题,需要谨慎使用,在转换前必须确认这一丢失是可以接受的。
double i = 1.3;System.out.println((int)i); //由double类型转换为int类型,输出结果为1,小数部分丢失short i = 200;System.out.println((byte)i); //由int类型转换为byte类型,输出结果为-56
如上例,由 double 类型转换为 int 类型可完成对浮点型数据的取整。而在第二例中,原 int 变量值为200,在内存中存储为0000,0000,1100,1000,在转换为 byte 类型时丢失高八位的0后,将低八位首位的1当做符号位处理,因此计算机判断为该值负数,1100,1000为其补码,将其转换为原码1011,1000,而后输出相应的十进制数字-56。
包装类
Java中万物皆对象,而其提供的原生数据类型并非对象,因此 Java.lang 包提供了包装类。
以Integer类为例,Integer类继承了java.lang.Number类,在对象中包装了一个基本类型 int 的值并提供了多个方法。
字段摘要:
方法摘要
自动装箱与拆箱
自动装箱:Java SE5开始提供自动装箱功能,允许隐式地将原始数据类型转换为类对象
拆箱:将类对象转换为对应的原始数据类型,必须显式
Integer obj = 1; /* * 自动装箱 * 实际执行了Integer obj = Integer.valueOf(1); */int i = (int)obj;/* * 拆箱 * 实际执行了int i = obj.intValue(); */
注:上例中自动装箱生成对象调用了方法valueOf(),因此会出现由此方式生成的同一数值对象内存地址相同的情况
Integer i1 = 1;Integer i2 = 1;System.out.println(i1 == i2); //输出trueInteger i3 = 200;Integer i4 = 200;System.out.println(i3 == i4); //输出false
这一情况由valueOf()方法导致,当Integer对象数值在-128~127间时,valueOf()方法只返回对应值的缓存对象而非建立新对象,valueOf()方法源码如下
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
其中IntegerCache.low与IntegerCache.high为IntegerCache类的静态成员常量,low值为-128,high值为127
- Java基础 —— 原生数据类型与包装类
- java基础_01_数据类型与包装类
- Java基础--基本数据类型与包装类
- 黑马程序员——Java基础--String类与基本数据类型对象包装类
- Java基础——String+基本数据类型对象包装类
- 黑马程序员--Java基础--基本数据类型与包装类
- JAVA基础:StringBuffer\基本数据类型与包装类
- Java学习提要——包装类与数据类型转换
- java基础数据类型包装类的作用
- Java基础:基本数据类型包装类
- 黑马程序员—OC基础--基础数据类型和包装类
- Java基础——Java笔记——基本数据类型包装类注意
- Java生涯——Java基础---String类和基本数据类型包装类
- 黑马程序员————Java基础之String类和基本数据类型包装类
- 黑马程序员——Java基础---String类和基本数据类型包装类
- 黑马程序员——Java基础---String类和基本数据类型包装类
- 黑马程序员——Java基础---String类、基本数据类型包装类
- 黑马程序员——Java基础---String类和基本数据类型包装类
- MySQL中子查询IN,EXISTS,ANY,ALL,SOME,UNION介绍
- $.ajax中contentType: “application/json” 的用法
- 网络搭建
- python爬虫学习第八天
- 【CodeForces
- Java基础 —— 原生数据类型与包装类
- [Visual Studio]MFC游戏开发之回合制对战系统二_by书訢
- Ajax的Result工具类
- oracle函数与条件表达式
- JQuery入门(一)
- 浏览器对象模型BOM
- 二维前缀和 codeforces 832C
- Laravel Composer Package 开发简明教程
- zookeeper(2) zookeeper客户端ZkClient入门