细谈JAVA中的数据类型

Java数据类型简介:

Java是一种强类型的语言,数值类型主要分为基本数据类型和引用数据类型,其中基本的数据类型分为8种,具体细节点及一些注意点如下。

java中的基本数据类型:

字符类型:

关键字:char  所占字节:2字节
细节点:1、java中的字符类型采用Unicode编码,加之2字节,因此java中的数据类型可以直接存储一个汉字,例如:char sex = ‘男‘;
注意点:1、声明字符类型时用的是单引号‘ ‘,而不是双引号"";

2、其实在正常开发中,绝大多数汉字所占的字节不止2个字节,所以在这里要特别注意;

布尔类型:

关键字:boolean 所占字节:1字节
细节点:1、只有两个值:true 或者 false
注意点:在条件语句中java是不允许像C/C++语言将数值类型0或非0充当true或者false的,而是仅仅允许true或false。

数值类型:

java中的数值类型又分为整数型和浮点型,其中整数型可以理解为整数,浮点类型可以通俗的理解为小数。

整数型:

关键字:byte   所占字节:1字节 中文简称:字节型
关键字:short  所占字节:2字节 中文简称:短整型
注意点:使用short类型时应注意其数值类型范围,避免越界溢出

关键字:int      所占字节:4字节 中文简称:整型
细节点:1、java中对于整型如没有特定的类型指定,则默认被声明为int型

2、通常把整数声明为int型

所以在平时开发中,int类型是用的最多的;

例 声明:

int i;

int num = 1;

在这里多说明一个知识点,自动拆装箱

有时需要将int这样的基本数据类型转换为引用类型对象,

例如:

Integer i = 10;

相当于:Integer i = new Integer(10);

这样的话,这里的i,就已经是一个引用类型了;

还有一种方法,耍点小聪明:

int i = 10;

String str = i+"";

这里的 str 值同样是10,但是它已经是引用数据类型了;

同理:引用数据类型转换为基本数据类型;

String str = "10";

int i = new Integer(str);

这里的i就已经变量一个基本数据类型了,可以进行正常的数值计算了;

关键字:long    所占字节:8字节  中文简称:长整型
注意点:由于java默认将整型定义为int型,所以当使用long类型时应该加上后缀L或小写的l,但是小写的l通常和1容易混淆,通常用大写的L作为其后缀

浮点类型:
Java中的浮点类型又分为两种,单精度浮点型和双精度浮点型,其中双经度浮点型的精确度要比单经度浮点型的精确度要高。

单精度浮点型:

关键字:float   所占字节:4字节  中文简称:单精度浮点型
细节点:由于在Java中默认对于浮点型数值使用Double类型存储,当使用float类型时应在声明其后加上大写的F或小写的f作为其后缀。
注意点:short
a = 1.35; short b = a +
12.56;注意这里由于12.56没有为其执行数值类型,所以默认为double类型,+会对前面的a自动进行精度提升为double类型的,那么其整个计算结果就是double类型的,而与short类型的结果声明的不符。

双精度浮点型:

关键字:double 所占字节:8字节  中文简称:双精度浮点型
注意点:Java中对于小数默认定义的数值类型为double类型,当使用double类型时可在其后加上大写的D或小写的d作为其后缀。

java中的自动类型提升:

当进行计算时,java会对类型自动进行数值类型提升,具体来说就是提升表示范围小的数值类型到整个表达式中数据类型表示范围最大的,常常发生在以下两个方面:
1、表达式中作为操作数或运算子整型提升:12.3f
+ 12.5
其中12.5没有显式的为其指定数据类型,则对于浮点型数值java默认为其指定为double类型,再参与运算式的运算,但前面是float类型,java为了不让整体精度丢失会默认把float类型的运算子自动提升为精度更高的double类型并让其继续参与运算。
2、表达式中为结果进行的自动类型提升:例如 double a = 12.5f + 12.3f;虽然整个表达式中的运算部分均为float类型但是所要赋予的结果是double类型的,则java会对其进行精度提升为double类型的。

java的强制类型转换:

java中的自动类型转换某些方面说是发生在 低精度 → 高精度 的情况的,而java中的强制类型转换某些方面说是发生在 高精度 → 低精度 的情况。
java中的自动类型转换是系统自动的,而java中的高精度类型转换则是手动的由程序编制人员手工强制的,因为显然提升精度并不会造成什么伤害而降低精度则常常会产生伤害,例如银行中所存定的钱数或者利息等。所以一个Java自动一个要程序员手动强制。
java中的强制类型转换的语法为:(要转换到的数据类型)要转换的参数或值
例如:(int)12.5 + 12.3
其中12.5会自动转换为12,对于正数java无论四舍五入,都将其转换为向下最靠近的正整数,负数则将其向上转换为最靠近的负整数例如:(int)-12.5会被转换为-12,注意这里仅仅转换距离(int)最近的一个参数,此例子中仅仅对12.5发生强制转换而不会连12.3也转换。

其他:

不恰当的转换会造成数值的溢出,关于溢出的具体情况大家可以参考博客园的其他园友的文章。另外Java中的数值类型的长度无论在什么机器上都是固定的,而非像C/C++语言一样在16位机器上int是多少位而到32位的机器上int又变成了多少位的适应性固定。

如果工作涉及到数据分析方面的时候,一般我们的这些基本数据类型并不能满足正常的开发需求的,总会有一些小的bug,例如有些计算会让我们的数值失去精度,关于这点,下次我们再详细讲解!

谢谢!

时间: 2024-11-07 12:38:16

细谈JAVA中的数据类型的相关文章

细谈Java中的时间与日期

Data类 java.util.Date类实在Java之中获得日期时间操作的最简单的一个程序类,这个类可以直接通过实例化Date类对象的形式获取当前的日期时间. 范例:获取当前的日期时间 import java.util.Date; public class Demo { public static void main(String args[]) { System.out.println(new Date()); } } 程序执行结果: Fri Mar 27 19:12:56 CST 2020

Java技术 | 细谈Java中UUID的简单了解与使用

什么是UUID? UUID全称:Universally Unique Identifier,即通用唯一识别码. UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为16^32 = 2^128,约等于3.4 x 10^38.也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完. UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符,如:550e8400-e29b-41d4-a716-446655440000. U

浅谈Java中的数据类型

主要内容来自MIT6.031 Software Construction课程及HIT 软件构造课程. Java的数据类型有两种,分为基本数据类型(primitive types)及对象数据类型(object types).例如int ,float,boolean等类型就是基本数据类型,而String ,Integer ,BigInteger等类型就是对象数据类型. 下面介绍一下这两点的异同: 基本数据类型都是不可变的(Immutable),而对象数据类型一些是可变的(mutable),一些则不是

【转】浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

JAVA中的数据类型——西科软件实训中心

Java数据类型简介: Java是一种强类型的语言,数值类型主要分为基本数据类型和引用数据类型,其中基本的数据类型分为8种,具体细节点及一些注意点如下. java中的基本数据类型: 字符类型: 关键字:char  所占字节:2字节细节点:1.java中的字符类型采用Unicode编码,加之2字节,因此java中的数据类型可以直接存储一个汉字,例如:char sex = "男";注意点:1.声明字符类型时用的是单引号'',而不是双引号"". 布尔类型: 关键字:boo

浅谈Java中的equals和==

浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初

浅谈Java中的深拷贝和浅拷贝

浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: [java] view plaincopyprint? int apples = 5; int pears = apples; int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用

浅谈Java中的Set、List、Map的区别(1)

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用