Java是一种类型安全的语言,编译器存储在变量中的数值具有适当的数据类型。学习任何一种编程语言都要了解其数据类型,今天小象就给大家详细介绍Java中的数据类型。在构建一个编程世界中,分成【数字】和【字符】是有意义的,我们猜测【数字】是用来做计算的最关键因素,无论是日期,还是金额,都需要有【数字】,这是必不可少的运算基础。而【字符】则是因为我们还是处在文字世界,文字是我们用来传递信息最关键的信息,文字很少能用来计算,但经常会被用做查找,匹配,截断等。
数据类型分类:a) 基本数据类型:八大基本数据类型
● 整数型:byte类型、short类型、int类型、long类型;
● 浮点型:float类型、double类型;
● 字符型:char类型;● 布尔型:boolean类型。b) 引用数据类型:数组,接口,对象...整数型
Short、int、long三个类型又被叫做:
短整型,整型,长整型,就像对应星巴克的中杯,大杯,超大杯。
三者之间的差别,就在于在内存中占据的字节数不一样。字节数代表什么呢?
代表着空间,字节数越大,就表示占据的空间越大。可以用包装箱来解释。中箱,大箱,超大箱分别三种款式,如果不做区分,只有一种箱子,为了保证能够把所有的数据都装进去,一定要统一做一个超大箱。这样会带来什么结果?
占据的仓库会变大,物流会增加,交付时间会拖长,这就是统一数据类型的坏处。所以,Java的构建者决定用短,整,长三种方式来构建整型,Java程序员自由决定应该用哪几种数据类型。注意事项:
1) 根据你需要存储的数据范围,来合理的选择使用数据类型。
2) 整数型固定值常量的默认类型是int类型。
3) 在整数型固定值常量末尾添加“L”或“l”,那么该常量就变为了long类型常量了。浮点型
float和doule用来描述一些整型不可描述的场面(小数数值)。doule是在开发中常用的小数类型,但是我们在金融应用中往往不会使用这两种,常用BigDecimal类来代替Float和Double。注意事项:
1) 实际开发中,我们使用double类型较多。
2) 固定值小数常量的默认数据类型为double类型。
3) 在小数固定值常量默认添加“F”或“f”,那么该常量就变为了float类型的常量了。
布尔型
【布尔】是一个很有意思的类型,他只有【true】或【false】。
true: 代表真或条件成立;false: 代表假或条件不成立。布尔类型常用于条件判断,例如:条件成立该做什么事,条件不成立又该做什么事。字符型
char类型占用2个字节 常量:使用单引号包裹的一个字符,我们称之为字符常量,用来表示通常意义上"字符",涵盖世界上所有书面语的字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。请看下面的例子:
public class PrimitiveTypeTest {
public static void main(String[] args) {
// byte
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
System.out.println();
// short
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println("包装类:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
System.out.println();
// int
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
System.out.println();
// long
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" java基础数据类型字节数 + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
System.out.println();
// float
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
System.out.println();
// double
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
System.out.println();
// char
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
System.out.println("包装类:java.lang.Character");
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE="
+ (int) Character.MIN_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE="
+ (int) Character.MAX_VALUE);
}
}
运行结果:
String
String 引用类型,又称为字符串类型。字符串分为常量和变量两种,其中,字符串常量使用双引号括起来的一串字符(字符串常量不可变亦不可赋值给字符串变量),系统为程序中出现的字符串常量自动创建一个String对象。例如:
System.out.println("hello world!");
这句话将创建一个String对象,值为“hello world!”。
对于字符串变量,在使用之前要显式声明,并进行初始化。
字符串的声明方式有三种:● 直接创建:String str1 = "Hello";
字符串是对象,虽然我们在这里没有用new创建对象,其实是编译器给我们做了这些操作。这种创建的字符串对象有一个特点,如果同样的对象如果存在了,就不会创建一个新的对象,而是指向了同样的对象。例如String str2 = "Hello";,则str1和str2是指向了字符串池中同样的内存地址,即str1 == str2;● 使用字符串连接创建:String str = "Hello" + "World";
这种形式其实可以看做是第一种的形式的特殊形式。"Hello" + "World"在编译期会被自动折叠为常量“HelloWorld”,所以,最后只会创建一个对象:String str = "HelloWorld";● new创建字符串:String str1 = new String("Hello");
用new关键字创建的字符串每次都会创建一个新的对象。即使这时创建一个字符串
String str2 = new String("Hello");
str1与str2是两个对象,str1 != str2; 数据类型转换
因为java是强类型语言,所以要求执行“赋值运算”和“算数运算”的时候,参与运算的数据类型必须保持一致。数据类型转换分为两种:a) 隐式类型转换,无需程序员手动处理;b) 强制类型转换,需要程序员手动处理;除了boolean类型之外,其余的数据类型在内存中存储的都是数值。所以,除了boolean类型之外,其余的数据类型都可以相互转换。隐式类型转换原则:从低字节向高字节转换(提升)。
赋值运算:从低字节向高字节转换(提升)。特例:把int类型常量赋值给byte、short和char类型的变量时, 属于自动类型转换的特例,只需不超出其表数范围即可。代码所示:
long a的运算数值在结尾处未标明L,系统编译时将会默认数值为int类型,输出的结果为负数是因为运算的结果超出了int类型的取值范围,long b的为正确的long类型输出值。强制类型转换
自动类型转换无法实现的时候,那么我们就使用强制类型转换。● 强制类型转换的语法
目标数据类型 变量名|常量名= (目标数据类型)变量|常量;● 强制类型转换的注意点1) 强制类型转换之后的数据的数据类型保持不变。
int num1 = 10; byte num2 = (byte)num1; // 此处强转之后num1依旧为int类型。2) 小数转换为整数
int num2 = (int)123.45;// 输出:123。3) 使用强制类型转换的时候需要慎重!可能会丢失精度。
int num1 = 128; byte num2 = (byte)num1; // 输出:-128。以上就是今天的技术分享,有任何不明白的问题记得私信小象哦~- End -
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/25889.html