《java 基础数据类型.docx》由会员分享,可在线阅读,更多相关《java 基础数据类型.docx(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、java基础数据类型分成四个大类1、整型byte、short、int、long2、浮点型float、 double3、字符型char4、布尔型boolean数据类型详细介绍整型(byte、short、int、long )虽然byte、short, int. long数据类型都是表示整数的,但是它们的 取值范围可不一样。byte的取值范围:-128-127 (-2的7次方到2的7次方-1) short的取值范围:-32768 32767( -2的15次方到2的15次方-1) int 的取值范围-2147483648 2147483647 ( -2 的 31 次方到 2 的31次方-1)long
2、的取值范围:-9223372036854774808 9223372036854774807 ( -2 的 63 次方到 2 的 63 次方-1) 由上可以看出byte、short的取值范围比较小,而long的取值范围最 大的,所以占用的空间也是最多的。int取值范围基本上可以满足我们 的日常计算需求了,所以也是我们使用的最多的一个整型类型。浮点型(float、double )float和double都是表示浮点型的数据类型,它们之间的区别在于精 确度的不同。float (单精度浮点型)取值范围:3.402823e + 38 - 1.401298e-45(e+38表示乘以10的38次方,而e-
3、45表示乘以10的负45次方)double (双精度浮点型)取值范围:1.797693e+3084.9000000e-324 (同上)double类型比float类型存储范围更大,精度更高。带小数点的字面量默认属于double类型,所以声明一个float类型的 变量时,都要在数字后面加上F或f0在Java中,对浮点型数据使用基本的加减乘除运算符,计算的数据可 能不是完全精确的,有时候可能出现小数点后几位浮动。对于金融行业 或者和钱有关的业务来说,这是不可接受的,当出现与金钱数值相关的 场景,建议使用BigDecimal进行运算。字符型(char)char有以下的初始化方式:/可以是汉字,因为是
4、Unicode编码char ch = a;/可以是十进制数、八进制数、十六进制数等等。char ch = 1010;/可以用字符编码来初始化,如:0表示结束符,它的ascH码是0,这 句话的意思和ch = 0是一个意思。char ch = 0;Java是用unicode来表示字符,中这个中文字符在unicode就是两个字节。unicode / gbk / gb2312是两个字节,utf-8是3个字节。对于字符串(String ),可以通过 String.getBytes(encoding)方法, 获取指定编码类型的byte数组。布尔型(boolean)boolean型只有两个取值true和fa
5、lse它的默认值是false 对于布尔型占用的空间,得看JVM对于它的具体实现,有些JVM底层其实是使用0和1来表示true和false ,那么就是4字节。在java中将一种类型的值赋值给另一种类型是很常见的。boolean类 型与其他7种类型的数据都不能进行转换,char类型不支持自动转换 成它,只支持强制转换,除了这两种类型有些特殊以外,其他6种数据 类型,它们之间都可以进行相互转换,只是可能会存在精度损失。转换分两种,自动转换和强制转换 自动转换:隐式的,对程序员无感知强制转换:显式的,需指定目标类型将6种数据类型按取值范围的大小顺序排列一下:double float long int
6、short byte取值范围从小转换到大,是可以直接转换的,而从大转成小,或转成char类型,则必须使用强制转换。自动转换时会进行扩宽(widening conversion ) o因为较大的类型(如int)要保存较小的类型(如byte ),取值范围是 足够的,不需要强制转换。在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他 类型的自动转换不会出现精度损失。int floatlong floatlong doublefloat double除了可能的精度损失外,自动转换不会出现任何运行时(run-time )异 常。强制转换如果要把大的转成小的,或者在short与char之间进行
7、转换,就必须 强制转换。这也被称作缩小转换(narrowing conversion ),因为必须显式地使 数值更小以适应目标类型。强制转换的格式和实例如下:(target-type) value;/实例long lo = 99;int i = (int) lo;严格地说,byte转为char不属于(narrowing conversion ),因为 从byte至Ichar的过程其实是byte-int-char,所以widening和 narrowing 者隋。强制转换可能会损失精度,主要有两种场景1、整数类型之间相互转换,如果整数超出目标类型范围,会对目标类 型的范围取余数。1、从浮点类型转
8、成整数类型,会发生截尾(truncation ),也就是把 小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围, 一样将对目标类型的范围取余数。类型自动提升在表达式计算过程中会发生类型转换,这些类型转换就是类型提升,类型提升规则如下:1. 所有byte/short/char的表达式都会被提升为int除以上类型,其他类型在表达式中,都会被提升为取值范围大的那个类型,例如有一个操作数为double ,整个表达式都会被提升为 double拓展知识点Java是面向对象语言,其概念为一切皆为对象,但基本数据类型是个例外 基本数据类型大多是面向机器底层的类型,它是“值”而不是一个对 象,对于声明
9、在方法中的基本类型变量,它存放于“栈中而不是存放 于“堆中。这有很多好处,例如不需要和对象一样需要在堆中分配内 存,然后搞个引用指向它。不需要GC ,因为是直接在栈上分配空间, 方法运行结束就出栈回收掉了。可以放心的使用最基本的运算符进行比 较和计算等等。没有什么是完美无缺的,数据类型也有缺点,例如会自动设置默认值(这是双刃剑,一些场景下会增加额外的处理逻辑),不支持泛型等。Java希望使用一切皆为对象的理念来统一语言设计,但基本类型确实 有很多优点和使用场景,鱼和熊掌我就要兼得之!所以它为每一个基本 类型都提供了相应的包装类,封装了很多实用的方法,最重要的是,提供了自动装箱和自动拆箱的语法糖,让开发者可以无感知的在包装类型和基础类型之间来回切换。boolean Boolean char Character byte Byte short Shortint Integer long Long float Float double Doublechar String (字符串)
限制150内