java基础详解之数据类型知识点总结

一、基本数据类型

1.1 整形

1.1.1 int

int a = Integer.MAX_VALUE;//int最大值
int b = Integer.MIN_VALUE;//int最小值

在java中int占4个字节,和操作系统每任何关系。这也是java的可移植性。

int 能表示的范围为-231~231-1,如果超出最大值或者小于最小值则会发生溢出。

public static void main(String[] args) {
            int a = Integer.MAX_VALUE;//int最大值
            int b = Integer.MIN_VALUE;//int最小值
            System.out.println("MAX_VALUE="+a);
            System.out.println("MIN_VALUE="+b);
            a = a+1;
            b = b-1;
            System.out.println("---------------");
            System.out.println("MAX_VALUE+1="+a);
            System.out.println("MIN_VALUE-1="+b);
}

我们发现int的最大值加1会等于int的最小值,而int的最小值减1会等于int的最大值。这种情况不仅在int,在long和short都存在

1.1.2 长整形:long

long占8个字节,可表示的范围是 -263~-263-1

long a = 100L;
long b = 100l;
long c = 100;

在创建长整形变量时,a,b,c三种都可以,当我们一般用第一种,大写L更好识别它时长整形

1.1.3 短整形:short

short占2个字节,所能表示的范围为-215~215-1
short能表示的范围 -32768~32767 ,所表示的范围比较小一般不推荐使用,所以我们以后 int 和 long 时使用的比较多的。

1.2 浮点型

1.2.1 双精度浮点型:double

public static void main(String[] args) {
            int a1 = 1;
            int a2 = 2;
            double b1 = 1.0;
            double b2 = 2.0;
            System.out.println("a1/a2="+a1/a2);
            System.out.println("b1/b2="+b1/b2);
}

在java当中int除以 int 只能得到 int 类型,因为小数部分会被舍去。如果要得到小数则需要用浮点数来计算。

再来看一个有意思的代码

public static void main(String[] args) {
            double a = 1.1;
            System.out.println(a*a);

}

这里a*a理论上说时等于1.21的但这里为什么不是呢?

1.Java 中的 double 虽然也是 8 个字节, 但是浮点数的内存布局和整数差别很大, 不能单纯的用 2n 的形式表示数据范

2.Java 的 double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势
必会存在一定的精度误差围,而且计算机中小数是没有精确的数字的

1.2.2 单精度浮点型:float

flaot占4个字节

public static void main(String[] args) {
            float a1 = 1.1;
            float a2 = (float)1.1;
            float b = 1.1F;
            float c = 1.1f;
}

这里为什么报错呢?因为Java是一个强类型语言,安全性更高。在Java当中小数默认是double类型的,在创建float变量的时候,需要在小数后面加上一个F(f)或者强制类型转换。

不过float能表示的精度较小,所以我们一般都是用double

1.3 字符类型变量char

在java中char不同于C语言它是占两个字节的,计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文.

public static void main(String[] args) {
            char a = 97;
            char b = 65;
            char c = '好';
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
}

在Java当中字符类型就是字符类型不要和数字挂钩,记住java中字符类型是不能够给负数的。

1.4 字节类型变量byte

byte占1个字节,能表示的范围为 -128~127
byte不能赋值超过它范围外的数字,从而可以推到出其它类型也是一样的。

来看一段代码:

这里的 b3和b5都报错,而b4没有报错呢?

1.这是因为执行 b3 这段代码时,b1和b2都是变量编译器不知道里面是什么,为了安全起见所以报错。

2.而b4不报错时因为在编译的时候 5+10就已经被替换为15了,相当于 b4 = 15.

3.那b5报错又是为什么呢?这里就牵扯到了整形提升,

简单说一下整形提升:当变量小于4个字节的时候,比如这里的byte在计算时会把它先提升为整形int再进行计算。而byte是1个字节接收不了int类型的变量,所以报错。后面会再提到整形提升

1.5 布尔类型变量 boolean

boolean a = false;
boolean b = true;

1.在java中布尔类型只有两个取值 falsetrue

2.java中的boolean和int 类型不能相互转换,不存在1表示true ,0表示false这种用法

3.boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位。并没有明确规定大小

1.6 字符串类型变量 String

Java的字符串可以用+进行拼接

public static void main(String[] args) {
            String str1 = "这是一个字符串";
            String str2 = "java";
            String tmp = str1 + str2;
            System.out.println(tmp);
}

同样也可以拼接数字

public static void main(String[] args) {
            String str1 = "这是一个字符串";
            String str2 = "java";
            String tmp = str1 + str2;
            System.out.println(tmp);
            int a = 10;
            int b = 20;
            System.out.println(tmp+a+b);
            System.out.println(a+b+tmp);
}

输出的时候如果前面是字符串则后面的数字会被当作字符进行拼接,可以根据自己的需要进行运算或者拼接

1.Java 使用 双引号 + 若干字符 的方式表示字符串字面值.

2. 和上面的类型不同, String 不是基本类型, 而是引用类型(在以后的文章会说到).

二、常量

上面讨论的都是各种规则的变量, 每种类型的变量也对应着一种相同类型的常量.

常量指的是运行时类型不能发生改变.

常量主要有以下两种体现形式

2.1 字面常量

2.2 … final 关键字修饰的常量

final修饰的常量是不能被直接修改的

三、 类型转换和数值转换

3.1 类型转换

java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验.来看一下列子

long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.

double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.

结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.

3.1.1 强制类型转换

结论: 使用 (类型) 的方式可以将 double 类型强制转成 int. 但是

1.强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 20.5 就变成 20 了, 小数点后面的部分被忽略.

2.强制类型转换不是一定能成功, 互不相干的类型之间无法强转

比如这个列子 int 和 boolean这两种完全不相关的类型是不可以强转的。

类型转换小结:

1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.

3.2 数值提升

结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来
接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.

再来看一个例子,前面在byte类型的时候就已经说到了,这里再详细说一下。

结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这时赋给 c, 就会出现上述错误。

由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算。
简单来说类型提升就是为了加快cpu运算速度

如果非要这样计算,则需要强转。

类型提升小结:

1.不同类型的数据混合运算, 范围小的会提升成范围大的.

2.对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

四、 int 和 String 之间的相互转换

4.1 int转String

public static void main(String[] args) {
            int a = 10;
            //方法1
            String str1 = 10+" ";
            //方法2
            String str2 = String.valueOf(a);
}

4.2 String转int

public static void main(String[] args) {
            String str = "123456";
            int b = Integer.valueOf(str);
            int c = Integer.parseInt(str);
}

五、总结

内置数据类型共有8种,每一个内置类型都会对应一个包装类,这里也不深入讲解。简单来说就是方便了数据的处理
感谢阅读!

到此这篇关于java基础详解之数据类型知识点总结的文章就介绍到这了,更多相关java数据类型总结内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java基本数据类型和运算符详解

    本文实例讲述了Java基本数据类型和运算符.分享给大家供大家参考,具体如下: 基本数据类型 Java 是一种强类型的语言,声明变量时必须指明数据类型.变量(variable)的值占据一定的内存空间.不同类型的变量占据不同的大小. Java中共有8种基本数据类型,包括4 种整型.2 种浮点型.1 种字符型.1 种布尔型,请见下表. Java基本数据类型 数据类型 说明 所占内存 举例 备注 byte 字节型 1 byte 3,127   short 短整型 2 bytes 3,32767   in

  • Java为什么基本数据类型不需要进行创建对象?

    Java是一门面向对象的语言,即一切皆是对象!那么为何数据类型中还分为:基本类型和对象? Java中有8种基本数据类型boolean.byte.short.char.int.flaot.long.double,基本数据类型作为Java语言的一部分,但基本数据类型不是对象,基本数据类型放在堆栈中,对象放在堆中.堆的读写速度远不及栈,如果使用基本数据类型相当于在栈上进行操作,对变量的创建和销毁速度非常快.相反,如果用类进行定义变量,需要在堆中进行操作,创建和销毁速度都比较慢. 出于性能方面的考量,为

  • Java数据类型转换实例解析

    这篇文章主要介绍了Java数据类型转换实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 数据类型转换 Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换. 数据类型的转换分类 自动类型转换 自动类型转换(隐式):将 取值范围小的类型自动提升为取值范围大的类型 . 转换规则 :范围小的类型向范围大的类型提升, byte.short.char 运算时直接提升为 int . byte.short.

  • 解析本地方法映射Java层的数据类型

    前言 Java 语言上定义了不同的数据类型,比如有基础类型int.double等等,还有所有类的父类Object等,这些都是 Java 层面的类型,而使用本地方法的处理过程需要有它们对应的类型. 大概的流程 Java 层编写的本地方法,被编译器编译为字节码,字节码将按照规范将不同类型的参数给记录到 class 文件中,比如 B 表示 byte.I 表示 int.J 表示 long 等等.那么一个如下的本地方法,被记录为(Ljava/lang/Object;II)V. public static

  • java 各种数据类型的互相转换实例代码

    StringBuilder转化为String String str = "abcdefghijklmnopqrs"; StringBuilder stb = new StringBuilder(str); 整型数组转化为字符串 StringBuilder s = new StringBuilder(); for(i=1;i<=n;i++) { s.append(String.valueOf(a[i])); } String str = ""+s; 字符串转化为

  • Java基本知识点之变量和数据类型

    Java中的变量和基本数据类型: 写完第一个java程序之后,我们对Java也有了初步的了解,现在我们再来继续认识一下Java中的基本知识点--变量和数据类型. 那么我们该怎样来认识变量和数据类型呢,在这里,我们首先来认识一下内存,我们日常生活中的计算机体系中内存主要分为内存储器和外存储器,比如说我们平常看我们电脑配置的时候,都会看到8G+256G这样的标志,其中的8G就是所说的内存储器(RAM),而256G也就是外存储器,诸如磁盘,u盘,光盘等,这里我们就不详细的研究了.我们定义的变量占用的就

  • java数据类型和运算符的深入讲解

    一.整型变量 1.基本格式 int 变量名 = 初始值; 代码示例: public class CSDN { public static void main(String[] args) { int a=10; System.out.println(a); } } 2.java中的int是4个字节. 3.java中int的最大值和最小值 如果数大于0,则最高位为0,如果数小于0,则最高位为1.在判断数值范围时,不用考虑负数采用补码形式存储,因为补码和原码是一一对应的.当最高位是1,即为负数,后面

  • Java 数据类型及类型转换的互相转换实例代码

    一.基本数据类型 java的数据类型可以分为两大类:基本类型和复合类型. 基本类型:整型(int,short,long,byte).浮点型(float,double).布尔型(boolean).和字符型(char) 复合类型:数组,类,接口 1.整型 各种整型数据所占空间及数的范围 数据类型 所占内存空间/位 数的范围 byte 8 -128~127 short 16 -32768~32767 int 32 -2^31~2^31-1 long 64 -2^63~2^63-1 整型以补码的形式存放

  • 浅谈java基本数据类型的范围(分享)

    如下所示: System.out.println("BYTE MAX_VALUE = " + Byte.MAX_VALUE); System.out.println("BYTE MIN_VALUE = " + Byte.MIN_VALUE); System.out.println("SHORT MAX_VALUE = " + Short.MAX_VALUE);//3万多,5位 System.out.println("SHORT MIN_

  • java基础详解之数据类型知识点总结

    一.基本数据类型 1.1 整形 1.1.1 int int a = Integer.MAX_VALUE;//int最大值 int b = Integer.MIN_VALUE;//int最小值 在java中int占4个字节,和操作系统每任何关系.这也是java的可移植性. int 能表示的范围为-231~231-1,如果超出最大值或者小于最小值则会发生溢出. public static void main(String[] args) { int a = Integer.MAX_VALUE;//i

  • Java 基础详解(泛型、集合、IO、反射)

    计划把 Java 基础的有些部分再次看一遍,巩固一下,下面以及以后就会分享自己再次学习的一点笔记!不是有关标题的所有知识点,只是自己觉得模糊的一些知识点. 1.对于泛型类而言,你若没有指明其类型,默认为Object: 2.在继承泛型类以及接口的时候可以指明泛型的类型,也可以不指明: 3.泛型也数据库中的应用: 写一个 DAO 类对数据库中的数据进行增删改查其类型声明为 <T> .每张表对应一个类,对应每一张表实现一个类继承该 DAO 类并指明 DAO 泛型为该数据表对应的类,再实现一个与该表匹

  • Java基础详解之包装类的装箱拆箱

    一.包装类 概念: Java提供了两个类型系统,基本数据类型和引用数据类型,使用基本数据类型在于效率,然而很多情况下回创建对象使用,因为对象能做更多的功能. 所以可以使用一个类,把基本数据类型包装起来,在类中定义一些方法,这就叫做包装类.我们可以用这种方法来操作这些数据类型 基本类型 对应包装类(位于java.lang中) byte Byte short Short int Integer long Long float Float double Double char Character bo

  • Java基础详解之集合框架工具Collections

    一.Collections 说明:Collcetions是集合框架中的工具,特点是方法都是静态的. 二.Collections中的常见方法 1,对list进行二分查找:前提该集合一定要有序. int binarySearch(list,key);//要求list集合中的元素都是Comparable的子类. int binarySearch(list,key,Comparator); 2,对list集合进行排序. sort(list); sort(list,comaprator); 3,对集合取最

  • Java基础详解之内存泄漏

    一.什么是内存泄漏 内存泄漏是指你向系统申请分配内存进行使用(new/malloc),然后系统在堆内存中给这个对象申请一块内存空间,但当我们使用完了却没有归系统(delete),导致这个不使用的对象一直占据内存单元,造成系统将不能再把它分配给需要的程序. 一次内存泄漏的危害可以忽略不计,但是内存泄漏堆积则后果很严重,无论多少内存,迟早会被占完,造成内存泄漏. 二.Java内存泄漏引起的原因 1.静态集合类引起内存泄漏: 像HashMap.Vector等的使用最容易出现内存泄露,这些静态变量的生命

  • Java基础详解之面向对象的那些事儿

    一.面向对象的理解 首先,要清楚一点,与面向过程不同,面向对象有着自己独特的优势.举个通俗的例子,设想我们要得到一把椅子,面向过程的话我们可能需要通过买木材,设计图纸,最后切割而成.但对于面向对象来说,我们只需找到一个家具店,买一把椅子即可. 面向对象也是Java语言的特点之一,其实从idea中不难看出,这种面向对象的语言所具有: 1.易维护 2.易复用 3.易扩展 二.三大特性 2.1 继承(extends): 顾名思义,是获取原有的基础,在此基础上进行操作的一个过程.使用已存在的类的定义作为

  • Java基础之详解基本数据类型的使用

    一.整型 主要扩展一下不同进制的整型 二进制.八进制.十进制.十六进制 * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写就是十进制 * 十六进制 : 0X (数字零+X)0x (数字零+x) A-F 代表 10-15 1.1 测试代码 /** * 进制 : * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写就是十进制 * 十六进制 : 0X (数字零+X)0x (数字零+x) *

  • java开发RocketMQ消息中间件原理基础详解

    RocketMQ 是什么 Github 上关于 RocketMQ 的介绍: RcoketMQ 是一款低延迟.高可靠.可伸缩.易于使用的消息中间件.具有以下特性: 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型 在一个队列中可靠的先进先出(FIFO)和严格的顺序传递 支持拉(pull)和推(push)两种消息模式 单一队列百万消息的堆积能力 支持多种消息协议,如 JMS.MQTT 等 分布式高可用的部署架构,满足至少一次消息传递语义 提供 docker 镜像用于隔离测试和云集群部署 提

  • JAVA 注解详解及简单实例

    JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖性  可以通过注解替代配置文件,简化项目的配置.现有的许多框架都采用这个功能减少自己的配置. 编译检查  在编译时进行格式检查,例如@Override 基础注解 Java目前内置了三种标准注解,以及四种元注解.四种元注解负责创建其他的注解. 三种标准注解 @Override,表示当前的方法覆盖超类中

  • Java 泛型详解与范例

    目录 一.泛型的使用 二.泛型类的定义-类型边界 三.类型擦除 四.泛型类的使用-通配符 五.泛型方法 六.泛型的限制 一.泛型的使用 前面我们学集合的时候,简单的说过泛型的使用.如下: ArrayList<Integer> list = new ArrayList<>(); Queue<Integer> queue = new LinkedList<>(); 那么使用是这样的简单,该注意什么? 尖括号里的类型,只能写引用类型 基础数据类型的话,就需要写相应

随机推荐