-
关于java中的数据类型
- 数据类型的作用是什么
- 程序当中有很多数据,每一个数据都是有相关类型的,不同数据类型的数据占用的空间大小是不同的
- 数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间
- java中的数据类型包括两种
- 基本数据类型
-
基本数据类型包括四大类八小种
- 第一类:整数型
- byte,short,int,long
- 第二类:浮点型
- float.double
- 第三类:布尔型
- boolean
- 第四类:字符型
- char
- 八种基本数据类型各自占用的空间大小是多少
基本数据类型 占用空间大小[单位:字节] byte 1 short 2 int 4 long 8 float 4 double 8 boolean 1 char 2 - 第一类:整数型
-
- 引用数据类型
- 类
- 接口
- 数组
- …
- 基本数据类型
- 字符串“abc"不属于基本数据类型,属于引用数据类型,字符属于基本数据类型
- 字符串使用双引号"abcd"
- 字符使用单引号’a’
- 计算机在任何情况下都只能识别二进制
- 什么是二进制
- 数据的一种表示形式,十进制表示满十进一原则,二进制表示满二进一原则
- 什么是二进制
- 字节(byte)
- 1 Byte=8 bit [1个字节=8个比特位]
- 1个比特位就是一个1 或者一个0
- 整数型当中的byte类型,占用一个字节,所以byte类型数据占用8个比特位,那么byte类型的取值范围是?
- 关于java中的数据类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位被称为“符号位”,并且这个“符号位”在所有二进制位的最左边。
0表示正数,1表示负数。 - byte类型最大值:01111111
- byte类型的取值范围:[-128-127]
- byte类型可以表示256个不同的数字
- 关于java中的数据类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位被称为“符号位”,并且这个“符号位”在所有二进制位的最左边。
- 计算机如何表示现实世界当中的文字?
- 八种基本数据类型当中,byte,short,int,long,float,double,boolean这7种数据类型计算机在表示的时候比较容易。因为底层都是数字,
十进制的数字和二进制之间存在一种固定的转换规则 - 但是八种基本数据类型当中char类型表示的是现实世界中的文字,文字和计算机二进制之间默认情况下是不存在任何转换关系的
- 为了让计算机表示现实世界中的文字,需要人负责提前制定好“文字”和“二进制”之间的对照关系,这种对照转换关系叫做:“字符编码”
- 八种基本数据类型当中,byte,short,int,long,float,double,boolean这7种数据类型计算机在表示的时候比较容易。因为底层都是数字,
- 八种基本数据类型的取值范围
基类型 取值范围 byte [-128-127] short [-3268-3267] int long float double boolean [true,flase] char [0-65535] - note:
- short 和char所表示的种类总数是一样的,只不过char可以表示更大的正整数,因为 char没有负数
- 注意
- 变量还是遵守这个语法:必须先声明,再赋值,才能访问
- 成员变量没有手动赋值,系统会默认赋值,局部变量不会
- 八种基本数据类型的默认值
类型 默认值 byte 0 short 0 int 0 long 0 float 0.0 double 0.0 boolean flase [在c语言中,true是1,false是0] char \u0000 - 八种基本数据类型的默认值是一切向0看齐。
- 数据类型——char
- 一个中文占用2个字节,char类型正好是2个字节,所以java中的char类型可以存储一个中文字符
- 转义字符 \
-
转义字符出现在特殊字符之前,会将特殊字符转换为普通字符
-
\n 换行符
-
\t 制表符
- note:
制表符和空格不同,他们的ASCII不一样,体现在键盘上两个不同的按键
- note:
-
以下并不是一个字符串,而是“一个”字符,这是一个“换行符”,属于char类型的数据.反斜杠在java中具有转义功能
- char i=’\n’;
-
System.out.println 输出之后换行
-
System.out.print 表示输出,但是不换行
-
在java中两个反斜杠代表一个普通的反斜杠字符
-
JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式
- 如何使用这个命令
- 在命令行输入native2ascii,回车,然后输入文字之后回车即可得到unicode编码
- 如何使用这个命令
-
- 数据类型–整型
- java语言当中的“整数型字面值”被默认当成int类型来处理。要让这个“整数型字面值”被当作long类型来处理的话,需要在“整数型字面值”后面添加l/L,
建议使用大写的L. - java语言当中的整数型字面值有三种表示方式
- 第一种方式:十进制[是一种缺省默认的方式]
- 第二种方式:八进制[在编写八进制整数型字面值的时候需要以0开始]
- 第三种方式:十六进制[在编写十六进制整数型字面值的时候需要以0x开始]
- long a= 123;
-
NOTE: 123整数型字面值被当作int类型,占用四个字节
-
a变量在声明的时候是long类型,占用8个字节
-
int 类型的字面值123赋值给long类型的变量 a,存在类型转换
- int 类型转换成long类型
- int 类型是小容量
- long 类型是大容量
- 小容量可以自动转换成大容量,称为自动类型转换机制
- 大容量不能直接赋值给小容量
- 大容量转换成小容量,需要进行强制类型转换
- 强制类型转换需要加“强制类型转换符”
- 加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度,所以强制类型转换,需要谨慎使用。因为损失精度之后可能损失很严重。
-
example
- long y=2149483647
System.out.println(y)
// 编译报错:过大的整数:2149483648
// 2149483648被当作int类型4个字节处理,但是这个字面值超出int类型范围- long y=2149483648;
// 解决错误
// y 是long类型变量,以下程序不存在类型转换- long y=2149483648L;
- long y=2149483647
-
分析以下程序是否可以编译通过?
- CODE:
- byte b =50;
- byte c =127;
// 编译报错,128这个int类型的字面值已经超出了byte类型的取值范围,不能直接赋值给byte类型的变量 - byte z =128;
// 纠正错误:需要使用强制类型转换符,但是一定会损失精度- byte z = (byte) 128;
- 根据目前所学,以下程序是无法编译通过
- 理由:50是int类型的字面值,b 是byte类型的变量,显然是大容量int转换成小容量byte
- 大容量转换成小容量是需要添加强制类型转换符的,以下程序没有添加强转符号,所以编译应该报错
- 但是,在实际编译过程中,以上代码编译通过了,这说明,在java中,当一个整数型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值给byte类型的变量
- 当一个整数字面值没有超出byte、short、char取值范围,这个字面值可以直接赋值给byte、short、char类型的变量
- 目的:是为了方便程序员的编程
- CODE:
-
- java语言当中的“整数型字面值”被默认当成int类型来处理。要让这个“整数型字面值”被当作long类型来处理的话,需要在“整数型字面值”后面添加l/L,
- 数据类型–精度损失
- 强转造成
- 数据类型–浮点型
- float 单精度 4字节
- double 双精度 8字节 精度较高
- sun公司为程序员准备了精确度更高的类型,只不过这种的数据类型属于一种引用的数据类型,不属于基本数据类型。他是java.math.BigDecimal
- 在java语言当中,所有的浮点型字面值,默认被当作成Double类型来处理,要想该字面值当成float类型来处理,需要在字面值后面添加F/f
- eg:
double b=3.0
- eg:
- java程序中sun提供了一套庞大的类库,java程序员是基于这套基础的类库来进行开发的。所以需要知道java的SE类库的字节码在哪里?要知道java
的SE类库的源码在哪里?- SE类库字节码文件路径
- SE类库源码文件路径
- eg:
- String.java和String.class
- 我们的(String[] args)中的String使用的就是String.class字节码文件
- String.java和String.class
- note:
- double 和 float在计算机内部二进制存储的时候存储的都是近似值
- 有些数字是无限循环的,计算机的资源是有限的,用有限的资源存储无限的数据只能存储近似值
- 数据类型–布尔型 boolean
- 在java语言当中boolean类型只有两个值:true和false。没有其他值。不像c语言当中,0和1可以表示假和真。
- 在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true底层是1
- eg:
- 编译报错:不兼容的类型
- boolean a=1;
- 正确的:
boolean a=true;
if (a){
System.out.println(‘success’)}
else {
System.out.println(‘failded’)}
- 编译报错:不兼容的类型
- 数据类型—基本数据类型之间的互相转换
- 转换规则
- 八种基本数据类型当中除布尔类型之外剩下的7种之间都可以互相转换
- 小容量向大容量转换,称为自动类型转换;容量从小到大排序:
- byte<short<int<long<float<double
-
char<
- note:
- 任何浮点类型不管占用多少个字节,都比整数型容量大
- char和short可表示的种类数量相同,但是char可以取更大的正整数
- char a=100; // 是正确的,不是错误的
- 大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用。
- 当整数字面值没有超出byte、short、char的取值范围,可以直接赋值给byte,short,char类型的变量
- byte,short,char混合运算的时候,各自先转换成int类型再做运算
- 多种数据类型混合运算,先转换成容量最大的那种类型再做运算
- 转换规则
- 数据类型的作用是什么
java学习笔记001
最新推荐文章于 2024-11-09 12:43:52 发布