大家好,又见面了,我是你们的朋友全栈君。
原始数据类型-包括byte,short,int,long, float,double,boolean和char
type | Size | Range | default |
---|---|---|---|
byte | 1字节(Byte)/8位(bit) | -128(-2^7) to 127(2^7-1) | 0 |
short | 2字节(Byte)/16位(bit) | -32768(-2^15) to 32767(2^15 – 1) | 0 |
int | 4字节(Byte)/32位(bit) | -2,147,483,648(-2^31) to 2,147,483,647(2^31 – 1) | 0 |
long | 8字节(Byte)/64位(bit) | -9,223,372,036,854,775,808(-2^63) to 9,223,372,036,854,775,807(2^63 -1) | 0L |
float | 4字节(Byte)/32位(bit) | -2^128 to +2^128 | 0.0f |
double | 8字节(Byte)/64位(bit) | -2^1024 to +2^1024 | 0.0d |
boolean | 1位(bit) | true or false | false |
char | 2字节(Byte)/16位(bit) | \u0000(即为0) to \uffff(即为65535) | ‘u0000’ |
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的”E+数字”表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314。
非原始数据类型 – 例如字符串,数组和 类
非原始数据类型称为引用类型,因为它们引用对象。
之间的主要区别原始和非原始数据类型为:
- 原始类型是在Java中预定义的(已定义)。非原始类型由程序员创建,不由Java定义(除外String)。
- 非基本类型可用于调用方法以执行某些操作,而基本类型则不能。
- 基本类型总是一个值,而非基本类型可以是null。
- 基本类型以小写字母开头,而非基本类型以大写字母开头。
- 基本类型的大小取决于数据类型,而非基本类型具有相同的大小。
类型自动转换
byte- > short- > char- > int- > long- > float- >double
类型自动转换示意图:(实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。)
强制类型转换
double- > float- > long- > int- > char- > short- >byte
事例:
int a = 100000000;
int b = 1000;
long c = a * b;
编译没任何问题,但结果却输出的是负数
因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围(简称:溢出),一般把第一个数据转换成范围大的数据类型与其运算
解决事例:
int a = 100000000;
int b = 1000;
long c = (long)a * b;
直接将 int 常量字面量赋值给 byte、short、char 等数据类型,而不需要强制转换,只要该常量值不超过该类型的表示范围都能自动转换
强制类型转换
double a = 9.78;
int b = (int) a;
不同数据类型的表达式中,类型会自动向范围表示大的值的数据类型提升。
事例:
long a = 100000000;
int b = 1000;
long c = a * b;
int 和 String类型转换
int -> String
int i=12345;
String s="";
第一种方法:s=i+""; //会产生两个String对象
第二种方法:s=String.valueOf(i); //直接使用String类的静态方法,只产生一个对象
第三种方法:String s = Integer.toString(i);
String -> int
s="12345";
int i;
第一种方法:i=Integer.parseInt(s);
//直接使用静态方法,不会产生多余的对象,但会抛出异常
第二种方法:i=Integer.valueOf(s).intValue();
//Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象
在转换过程中需要注意,因为字符串中可能会出现非数字的情况,所以在转换的时候需要捕捉处理异常
String str = "12345";
try {
int a = Integer.parseInt(str);
} catch (NumberFormatException e) {
e.printStackTrace();
}
try {
int b = Integer.valueOf(str).intValue()
} catch (NumberFormatException e) {
e.printStackTrace();
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105812.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...