Java是强类型语言,含义为:
- 所有的变量必须先声明、后使用
- 指定类的变量只能接受类型与之匹配的值
Java语言的类型有两类:基本类型(内置类型)和引用类型
基本类型包括boolean类型和数值类型。数值类型包含整数类型和浮点类型。整数类型包括byte,short,int,long,char,浮点类型包含float和double
引用类型包含类,接口和数组类型,还有一种null类型。
整型(int)
基本语法格式:int 变量名=初始值
默认值是0
一个int型数据占4个字节(不会根据平台而改变,固定是4个字节)
4 个字节表示的数据范围是 -2^31 ——2^31-1 , 也就大概是 -21亿到+21亿
查看int型的数据范围的语句:
System.out.println(Integer.MAX_VALUE); //int的最大值
System.out.println(Integer.MIN_VALUE); //int的最小值
Integer是int的一个包装类
而超出int的最大值之后2147483647,会从-2147483648开始继续加
int maxValue = Integer.MAX_VALUE;
System.out.println(maxValue+1); //-2147483648
System.out.println(Integer.MAX_VALUE); //2147483647
长整型变量(long)
基本语法格式:long 变量名=初始值
默认值是0
一个long型数据占8个字节
表示数据范围是-2^63 —— 2^63-1
System.out.println(Long.MAX_VALUE);//9223372036854775807
System.out.println(Long.MIN_VALUE);//-9223372036854775808
定义一个long型变量,使用的是一个巨大的整数值(超过了int型的表数范围),Java不会自动把这个整数值当成long类型处理,所以当定义long型变量时,需要在初始值后加上‘L’
long num=10L; //初始值写成10L,表示是一个长整型的数据
可以直接把一个较小的整数值(在int型表数范围内)赋给long类型的变量,Java并没有把数值当成long处理,只是会自动类型转换到long类型
双精度浮点型变量(double)
基本语法格式:double 变量名=初始值;
double num = 1.0D;
默认值是0.0d
一个double型数据占8个字节
表示数据范围是1.7976931348623157E308——4.9E-324
System.out.println(Double.MAX_VALUE);//1.7976931348623157E308
System.out.println(Double.MIN_VALUE);//4.9E-324
浮点数默认是double型的
浮点数除以0可以得到正无穷大或者负无穷大,Java会把和浮点数运算的0当成0.0处理
单精度浮点型变量(float)
基本语法格式:float 变量名 = 初始值;
float num=1.0F;
默认值是0.0f
一个float型数据占4个字节
表数范围是3.4028235E38——1.4E-45
System.out.println(Float.MAX_VALUE);//3.4028235E38
System.out.println(Float.MIN_VALUE);//1.4E-45
字符型变量(char)
基本格式:char 变量名=初始值;
char ch='A';
默认值是\u0000
表数范围是’\u0000’——’\uFFFF’,一共可以表示65536个字符,前256个’\u0000’——’\u00FF’字符和ASCII码中的字符完全一样
如果把0——65535范围的一个int型整数赋给char型变量,系统会把这个int型整数当成char类型来处理
System.out.println("c:\codes");//得不到希望的结果\会当成转义字符
System.out.println("c:\\codes");//可以得到正确的结果
字符型的包装类是Character
字符型也是一种整数类型,相当于无符号整数类型
字节类型变量(byte)
基本语法格式:byte 变量名 = 初始值;
默认值是0
一个byte型数据占1个字节
表数范围是-128——127
字节类型表示的也是整数. 只占一个字节, 表示范围较小 ( -128 -> +127 )
短整型变量(short)
基本语法格式:short 变量名=初始值;
默认值是0
一个short型数据占2个字节
表数范围是-32768(2^15 )——32767(2^15-1)
布尔类型变量(boolean)
基本语法格式:boolean 变量名 = 初始值;
默认值是false
字节大小没有规定
boolean 类型的变量只有两种取值, true 表示真, false 表示假
Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
字符串类型变量(string)
基本语法格式:String 变量名 = “初始值”;
字符串不是一种基本数据类型,字符串是一个类,也就是一个引用数据类型
java里没有\0这一说
字符串的 + 操作, 表示字符串拼接:
String a = "hello";
String b = "world";
String c = a + b;
System.out.println(c);
总结如下:
类型 | 字节大小 | 默认值 | 包装类 |
---|---|---|---|
byte | 1 | 0 | Byte |
char | 2 | \u0000 | Character |
short | 2 | 0 | Short |
int | 4 | 0 | Integer |
long | 8 | 0 | Long |
float | 4 | 0.0f | Float |
double | 8 | 0.0d | Double |
boolean | 没有规定 | false | Boolean |
类型转换
自动类型转换
把一个表数较小的数值或者变量直接赋给另一个表数范围更大的变量时,系统将可以进行自动类型转换
当把任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换为字符串类型,如果希望把基本类型的值转换为对应的字符串时,可以把基本类型的值和另一个空字符串进行连接
强制类型转换
强制类型转换的语法格式是:(targetType)value
强制类型转换会引起溢出,从而造成数据丢失
表达式类型的自动提升
所有的byte类型,short类型,char类型将被提升到int类型(都会提升到4个字节)
不同类型的数据混合运算, 范围小的会提升成范围大的.
对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.
当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.
cpu是以4个字节为单位,进行内存的读写数据,所有不够4个字节的值,都会提升为4个字节的int来进行运算