Bootstrap

JAVA的数据类型与变量

目录

1. 字面常量

2. 数据类型

3. 变量 

 3.2 长整型变量

3.3 短整型变量 

3.4 字节型变量

3.5双精度浮点型

3.6 单精度浮点型  

3.7字符型变量

 3.8布尔型变量

4.类型转换 

4.1自动类型转换(隐式)

4.2强制类型转换(显式)

 5.字符串类型


1. 字面常量

字面常量的分类:
1. 字符串常量:由 "" 括起来的,比如 “12345678” “hello word” 你好
2. 整形常量:程序中直接写的数字 ( 注意没有小数点 ) ,比如: 123 100
3. 浮点数常量:程序中直接写的小数,比如: 3.14 0.49
4. 字符常量:由 单引号 括起来的当个字符,比如:‘a’、 ‘1’
5. 布尔常量:只有两种 true false
6. 空常量: null

注意:字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型。  

2. 数据类型

Java 中数据类型主要分为两类: 基本数据类型 引用数据类型
基本数据类型有四类八种:
1. 四类:整型、浮点型、字符型以及布尔型
2. 八种:
数据类型
关键字
内存占用
内存占用
字节型
byte
1 字节
-128 ~ 127
短整型
short
2 字节
-32768 ~ 32767
整型
int
4 字节
-2^32~2^31-1
长整型
long
8 字节
-2^63~2^63-1
单精度浮点数
float
4 字节
有范围,一般不关注
双精度浮点数
double
8 字节
有范围,一般不关注
字符型
char
2 字节
0 ~ 65535
布尔型
boolean
没有明确规定
true false
注意:
(1)不论是在 16 位系统还是 32 位系统, int 都占用 4 个字节, long 都占 8 个字节
(2)整形和浮点型都是带有符号的
(3)整型默认为 int 型,浮点型默认为 double

 3.包装类

包装类指的是,基本数据类型对应的类类型。因为基本数据类型无法进行对象化处理,所以就引入了包装类。

8种基本数据byte、short、int、long、 float、double、char、boolean。除了int对应的是Integer,char对应的是Character。其余都是首字母大写即可。

3. 变量 

定义变量的语法格式为:
数据类型 变量名 = 初始值 ;

3.1 整型变量

举例:

在定义时给出初始值
int a = 10 ;
System . Out . println ( a );
在定义时没有给初始值,但使用前必须设置初值
int b ;
b = 10 ;
System . Out . println ( b );  
注意事项:
1. int 不论在何种系统下都是 4 个字节
2. 推荐使用方式一定义,如果没有合适的初始值,可以设置为 0
3. 在给变量设置初始值时,值不能超过 int 的表示范围,否则会导致溢出
4. 变量在使用之前必须要赋初值,否则编译报错
5. int 的包装类型为 Integer

对于注意3细说:

不只是int,在java中,当你赋值字面常量值时,一旦超过变量能储存的最大值时,是会自动编译报错的。

但这种情况不会报错,但会溢出。

 

 

 3.2 长整型变量

举例
long a=100;
long b=100L;
System.out.println(a);
System.out.println(b);

基本数据类型a与b无区别,在变量能储存的范围内,低精度到高精度会自动转化。

但包装类数值后必须加L\l,不然报错。

注意事项:
1. 长整型变量的初始值后加 L 或者 l ,推荐加 L(如:10l容易被看成101)。
2. 长整型不论在那个系统下都占 8 个字节。

3.3 短整型变量 

short a = 10 ;
System . Out . println ( a );
// short 型变量所能表示的范围:
System . Out . println ( Short . MIN_VALUE );
System . Out . println ( Short . MAX_VALUE );

 

注意事项:
1. short 在任何系统下都占 2 个字节
2. short 的包装类型为 Short

3.4 字节型变量

举例:
byte a=127;
System.out.println(a);

注意事项:

1. byte 在任何系统下都占 1 个字节
2. 字节的包装类型为 Byte

 byte和short会存在整形提升。

如:

 因为整形提升,编译器会吧a,b会被当作整形类型变量,但在编译的过程中并不知道a,b的大小,存在超出范围的风险,故编译器会认为这是安全隐患,所以报错。

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

3.5双精度浮点型

举例:
double d = 3.14 ;
System . Out . println ( d );
(1)试着做一下这个问题
int a = 1 ;
int b = 2 ;
System . out . println ( a / b ); // 输出 0.5 吗?
原因: 在 Java , int 除以 int 的值仍然是 int( 会直接舍弃小数部分 )
如果想得到 0.5, 需要使用 double 类型计算 .
(2)再着做一下这个问题
double a=1.1;
System.out.println(a*a);// 输出 1.21 吗?

并不是

原因:无论是float,double都不是精确的,只能精确到小数后几位。

注意事项:
1. double 在任何系统下都占 8 个字节
2. 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算
3. double 的包装类型为 Double 
4. double 类型的内存布局遵守 IEEE 754 标准 ( C 语言一样 ), 尝试使用有限的内存空间表示可能无限的小数 , 势 必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。

3.6 单精度浮点型  

float num = 1.0f ; // 写作 1.0F 也可以
System . out . println ( num );
不加f/F会报错。
flfloat 类型在 Java 中占四个字节 , 同样遵守 IEEE 754 标准 . 由于表示的数据精度范围较小 , 一般在工程上用到浮点数 都优先考虑 double, 不太推荐使用 flfloat. flfloat 的包装类型为 Float
 

3.7字符型变量

 举例:

char c1 = 'A' ; // 大写字母
char c2 = '1' ; // 数字字符
System . out . println ( c1 );
System . out . println ( c2 );
// 注意:
java 中的字符可以存放整形
char c3 = ' ' ;
System . out . println ( c3 );
注意事项 :
1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值 .
2. 计算机中的字符本质上是一个整数 . C 语言中使用 ASCII 表示字符 , Java 中使用 Unicode 表示字符 . 因此 一个字符占用两个字节, 表示的字符种类更多 , 包括中文 .

 3.8布尔型变量

boolean b = true ;
System . out . println ( b );
b = false ;
System . out . println ( b );
注意事项:
1. boolean 类型的变量只有两种取值 , true 表示真 , false 表示假 .
2. Java boolean 类型和 int 不能相互转换 , 不存在 1 表示 true, 0 表示 false 这样的用法 .

4.类型转换 

Java 作为一个强类型编程语言 , 当不同类型之间的变量相互赋值的时候 , 会有教严格的校验 .
Java 中,当参与运算数据类型不一致时,就会进行类型转换。 Java 中类型转换主要分为两类:自动类型转换 ( 隐 式) 和 强制类型转换 ( 显式 )

4.1自动类型转换(隐式)

自动类型转换即: 代码不需要经过任何处理,在代码编译时,编译器会自动进行处理 。特点: 数据范围小的转为数 据范围大的时会自动进行 。(低精度变高精度)
(1)
int a = 100 ;
long b = 10L ;
b = a ; // a b 都是整形, a 的范围小, b 的范围大,当将 a 赋值给 b 时,编译器会自动将 a 提升为 long 类型,然后赋值
a = b ; // 编译报错, long 的范围比 int 范围大,会有数据丢失,不安全
(2)
flfloat f = 3.14F ;
double d = 5.12 ;
d = f ; // 编译器会将 f 转换为 double ,然后进行赋值
f = d ; // double 表示数据范围大,直接将 flfloat 交给 double 会有数据丢失,不安全

4.2强制类型转换(显式)

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。(高精度变低精度)
(1)
int a = 10 ;
long b = 100L ;
b = a ; // int-->long ,数据范围由小到大,隐式转换
a = ( int ) b ; // long-->int, 数据范围由大到小,需要强转,否则编译失败
(2)
float f = 3.14F ;
double d = 5.12 ;
d = f ; // flfloat-->double ,数据范围由小到大,隐式转换
f = ( float ) d ; // double-->flfloat, 数据范围由大到小,需要强转,否则编译失败
注意事项:
1. 不同数字类型的变量之间赋值 , 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的 , 需要强制类型转换 , 但是 可能精度丢失
3. 将一个字面值常量进行赋值的时候 , Java 会自动针对数字范围进行检查
4. 强制类型转换不一定能成功,不相干的类型不能互相转换
类型提升小结 :
1. 不同类型的数据混合运算 , 范围小的会提升成范围大的 .
2. 对于 short, byte 这种比 4 个字节小的类型 , 会先提升成 4 个字节的 int , 再运算 .

 5.字符串类型

举例:

public static void main ( String [] args ) {
String s1 = "hello" ;
String s2 = " world" ;
System . out . println ( s1 );
System . out . println ( s2 );
System . out . println ( s1 + s2 ); // s1+s2 表示:将 s1 s2 进行拼接
}

试着做一下这个问题

(1)String s1 = "hello";以什么结尾?‘\0’?

答:无结尾标准符。

(2)

int a=10;
int b=20;
System.out.println("a+b="+a+b);
System.out.println("a+b="+(a+b));
System.out.println(a+b+"=a+b");

小结:整形在前 那就默认是整形  要是字符串在前 后面的整形也被默认成字符串了。

以上为我个人的小分享,如有问题,欢迎讨论!!!  

 

 

;