声明: 本文主要作为作者的复习笔记,由于作者水平有限,难免有错误和不准确之处,欢迎读者批评指正.
Java八大基本数据类型
八大基本数据类型(默认值: 整型是0; 浮点型是0.0; 字符型是’\u0000’; 布尔型是false)
- 数值型: (1)整型: byte(1字节) < short(2字节) < int(4字节) < long(8字节) (2)浮点型: float(4字节) < double (8字节)
- 字符型: char(2字节)
- 布尔型: boolean
当进行网络编程或者IO编程时,基本操作单位都是byte.
双精度double保证小数点后12位之内的数字一定是准确的;若在某些精度要求特别严格的场景,更换使用BigDecimal类来存储小数.
数值型数据类型的最高位不存储具体数据(01),0表示正数,1表示负数.
八大基本数据类型对应的包装类(引用类型)
包装类: 在Java中一切皆对象,认为一切事物都可以使用类来进行描述,八大基本数据类型不属于类;因此在Java中,八大基本数据类型都有对应的类进行包装,这种类称之为包装类.
- 数值型: Byte Short Integer Long
- 浮点型: Float Double
- 字符型: Character
- 布尔型: Boolean
String是Java的字符串类型,不是基本类型,是引用类型,是字符串的类;
变量
定义之后,数值可以改变,称之为变量;能变的只有数值内容,数据类型无法改变!
在Java任意的方法内部声明的变量都属于局部变量,局部变量没有默认值,当方法调用结束,方法中的所有局部变量都会被销毁,内存释放.(局部变量必须在使用前赋值)
类中定义的变量存在默认值,默认值就是不同数据类型对应的值.
常量
定义之后,数值无法改变,称之为常量;
字面量: 直接写出来的数值就称之为字面量,字面量也存在数据类型,字面量属于常量.
类型转换与类型提升
小类型转换为大类型自动转换,大类型转换为小类型需要强制类型转换,有精度丢失问题.
关于int,byte,char之间的转换问题
- 当把整型字面量赋值给byte变量时,若在byte保存范围之内直接赋值(byte a = 127);若超出了byte的保存范围,必须进行强转,有精度丢失问题(byte b = (byte) 128).
- byte赋值时,若是整型字面量,在byte范围内的可以直接赋值;若是byte变量(存储实际上是int),无论变量值是多少,都需要强转.
类型提升: 当不同数据进行运算时,自动会将小类型提升为大类型然后参与运算.
byte,short,char这三个数据类型在存储时仍然保留其类型,当这三个类型参与运算时,因为CPU都是以4字节为基础进行读写内存的,因此这三个类型参与运算时会统一提升为int类型然后参与运算.
例:
byte a = 10; //a变量存储在内存中还是byte类型;
byte b = a; //正确,不涉及运算,都是简单的读写操作,a和b都是byte类型存储的;
byte c = (byte) (a+b); //涉及到变量间运算,a和b都会先提升为int之后参与运算;c在得到结果之后仍然以byte类型存储在内存中.
对于基本类型来说,所有类型之间都可以进行转换(错);
能相互转换的数据类型之间才能强转或者自动提升;
boolean与任何类型毫无关系,无法强转也无法提升.
拓展
- Java语言字符采用Unicode编码,16位编码(2字节),支持地球上所有语言;
- JDK包含了JRE,JRE包含了JVM;
- JDK: Java程序开发工具包,除了必备的Java运行时环境(JRE)之外,还有开发Java程序所需要的一些工具,javac(编译器),jconsole,jmap(JVM性能检测工具);
- JVM: Java语言跨平台的关键,java.exe运行其实就是启动JVM,具体解释执行Java程序的(解释的就是编译后的class文件) - 解释器,一行行翻译执行,边解释class字节码文件边执行;
- Java半编译半解释性语言,先使用javac将*.java源文件编译为与具体操作系统无关的字节码文件*.class(给JVM来解释执行);解释阶段,运行具体操作系统上的JVM来将class文件解释为具体平台上的机器码并执行;
- 标识符: 只能有数字,字母,下划线组成,$合法但不推荐,数字不能开头;
- 驼峰命名法: (1)类的名称: 大驼峰,所有单词的首字母大写class Test,源文件名称和主类名称保持一致;(2)变量和方法的名称: 小驼峰,从第二个单词开始首字母大写, 例如int myAge = 20;