00:00
今天分享的是Java基础的第一个数据类型程序,本质上是对数据的处理逻辑运算,因此任何语言都需先解决如何表征数据这个核心概念。数据作为抽象的概念,天然的包含两个方面,属性类型。类型决定了数据智能或同类型的数据进行运算才有意义,不同类型的数据必须进行类型转换。数值是数据的数学意义上的大小或内容,同时数据保存在内存或磁盘中总是占用一定的存储空间,因此一个数据在程序中是由类型、数值和存储空间表示的。Java是一种强类型语言,每个变量在声明时必须指定其数据类型。根据参数传递时的复制方式,Java中的数据类型分两类,基本数据类型、值类型。参数传递时总是以只拷贝的形式赋值。可接受变量本质是对数学意义上的。
01:00
纯数值类数据的抽象,因此又叫值类型。注意,基本数据类型在语言层面是不可分割的基本单元,但硬件层面并非是不可分割的,因为内存的读写是以内存行64位为基本单位的,但用两个或两个以上内存行的数据在高并发下是不安全的。引用类型及参数传递时是以拷贝引用地址的方式传递给接收变量,而非复制整个数据本体。除了基本数据类型外的其他结构化的数据类型,如字符串类型或自定义的例如,本质上是对现实世界结构化、关系化数据的抽象,因为一个对象如人,总是具备多个特征属性的,每个属性都是一个基本数据类型,为什么不是拷贝值?这类类型的变量本质上是一段存储空间的起始地址,因为结构化数据的存储空间的大小是由所有属性叠加的,且是可变的,不能或很难实现。
02:00
原子星的拷贝,且空间代价很大,因此参数传递时并不是机械的拷贝所有属性所有空间,而是仅复制拷贝起始地址就行了,其他字段可以据此及地址和字段顺序进行偏移计算所得值类型和引用类型的区别概念方面,基本类型变亮明指向具体的数值,参数传递会拷贝值的副本,原值不受影响。引用类型变亮明指向存数据对象的内存地址,参数传递是复制内存段的起始地址,最终指向同一内存段。相等语一基本类型使用时需要复具体值,使用号判断值是否相等,引用类型是判断引用地址是否相同,通常应重写一或方法实现自定义的逻辑,如同一学生会存在多个缓存中重写1PS,根据学号no是否相等,判断是否是同一学生基本数据类型值类型。
03:00
八外语言共提供了四类八种基本类型。整数型是对数学中整数的表达,按照数值范围和存储空间大小顺序。bitch forin头浮点型是对数学中的小数的表达及有浮动小数点的数。32位直接赋值时必须在数字后加上或只是编译器,这是一个full平浮点数,DOUBLE64位赋值时一般在数字后加D或D只是编译器,这是一个double幸福点数。unicode字符型是对unicode编码的表达,Unico编码是对全世界所有主要语言中各类字符符号的编码,是将文档转存成计算机的二进制序列进行保存的理论基础。查26位存储unicode码,用单引号赋值,查字符形式可计算叉va提供字符形,可以更方便的表述字符,同时支持基于编码的数值计算,因此,叉二类。
04:00
的值本质还是数值,可以参与数值计算。布尔星表示真或者假是对逻辑运算值的表达及真、纯和假falses普尔类型是非数值类型的,因此和其他基本数据类型不能参与计算。最小使用原则,即在满足需求的前提下,优先使用更小的类型,可以节省大量的内存,提升程序的性能。Java每个大类都提高了多个大小不一的类型,即是灵活的需要,更是内存优化的需要。接下来介绍的是类型转换。正如方法论中所说,不同类型的数据不能直接混合计算,必须转换同一种类型。Java中数据类型转换有两种方式,自动转换和强制转换。首先是自动也是转换,即在符合下面的规则下,Java编译器会安全的、隐示的进行转换,降低用户手动转换的压力。自动膨胀原则在精度不一致的。
05:00
混合场景下,Java编译器会隐示的将精度较小的类型转换成精度稍大的类型后才进行计算,由小转大,数据精度并不会丢失,因此是安全的。膨胀的顺序是bit、查特、flu do。由粒子可以看出,Java编译器不仅自动优化了变量类型,减少了内存,而且自动隐示的将BY转换成了flu,整个表达式的最终结果已是for型。如果使用精度较小的音频变量接收时就会提示出错。接下来是强制转换,在不符合自动转换条件时,或者根据用户的需要,可以使用符号对数据类型做强制的转换。注意,从精度大到精度小的强制转换,因为储空间也会缩小一半,因此存在数据出错的不确定性问题,用户自身需要自我承担这样的风险。可以看到,虽然编译阶段是正常的,没有提示错误,但是运行时的结果却是。
06:00
一个不确定的数据,而不是预期的装箱和拆箱。为了基本数据类型可以与引用类型互相转换,以利用彼此的特性,Java为每一种基本数据类型提供了相应的包装封装类包装类和想源模式。Java基本数据类型的包装类以value字段保留其对应的数值,如teger value可以通过构造器或者value方法生成新的包装对象。实例,想源模式及缓存池模式。因为在堆中创建新的对象是相对比较重的操作,同时基本数据类型的自动装箱又是程序中最常见的情况之一。因此,为为避免重复创建这些常用的对象,JDK实现的基本类型包装类基本都会采用缓存尺的设计,极小源模式数量由JVM参数xx phoTo Box max指定。饥饿迟化包装类在首次加载时会对指定小范围内的数值进行饥饿式迟化。
07:00
如Java linetegerteger、看什hi装箱box即将基本数据类型转换为对应封装类的引用类型,目的是获得对应封装类的各类方法的能力,例如enter enter,编译器是通过调用包装类的来文和方法实现自动装箱for box,当基本数据类型赋值给对应包装类的引用类型时,Java会自动的将基本数值类型通过其包装类的value在堆上创建其对应的包装类对象。拆箱点box是将封装类的引用类型转换为基本数据类型,例如in转应,目的是可以参与常规的数学运算,本质是编译器通过调用包装类的X sexx y6方法实现的。xxx代表对应的基本数据类型,自动拆箱ton box,当包装类与基本数据类型混合运算时,Java会调用该包装类的X xx value获得。
08:00
对应的值、类型的值,然后才参与表达式的计算,总监最后整理了一个完整的脑图。
我来说两句