赞
踩
作为一种强类型语言,Java针对每一种数据都定义了明确的数据类型。大体来讲可分为:基本数据类型和引用数据类型;在此,主要讨论前者,后者以后再继续探究。
Java基本数据类型分为四类八种:
1: 整数类型 占用字节数
byte 1
short 2
int 4
long 8
2:浮点数类型
float 4
double 8
3:字符类型
char 2
4:布尔类型
boolean 1
请注意:
不同类型的数据所占字节数也是不一样的,但是它们可以相互转换,请看下图:
请注意:
现在我们来通过一些实例,进一步了解Java基本数据类型及其相互转换。
示例一:
public void test0(){
char c='a';
int i=9;
int result=c+i;
System.out.println(result);
int int_a=c;
System.out.println(int_a);
}
先来看字符char类型的数据。字符从本质上来讲是数字;它可以参与算术预算;故也可将char转换成int查看其对应的数值是什么。
示例二:
此处,我们想声明一个float类型的变量f用于保存小数123.45,但是IDE报错:
Type mismatch: cannot convert from double to float
不能将double转换为float类型
此处IDE给出了两个修改该错误的建议
第一种建议:将123.45转换为float,即:
float f=(float) 123.45;
这是为什么呢?其实,原因我们刚才已经讲过了:浮点数默认为double类型。所以,此时系统将123.45当做了double类型,故可将其强转为float类型,但是别忘了如此强转可能造成精度丢失
第二种建议:将变量f的类型改为double,即:
double f=123.45;
直接将f声明为double类型,用其来存储123.45是再合适不过的了。
示例三:
在该例子中定义了int i=5和byte b=7,再将两者相加赋值给byte类型的result;此时IDE报错:
Type mismatch: cannot convert from int to byte
不能将int类型转换为byte类型
与示例二非常类型,IDE也给出了两个建议,我们可遵循其建议进行修改。
好了,继续看一个例子。
示例四:
看到这里,或许就郁闷了:两个byte类型的数据相加再赋值给byte的变量也有错么??居然再次报错:
Type mismatch: cannot convert from int to byte
或许有的人会想:两个byte相加,其结果可能会大于byte的取值范围。这么想没啥错,但这是根本的原因么?继续往下看!
示例五:
看到此处,可能没有那么郁闷但是有点麻木了,为啥又报错了呢?
示例六:
这些错误的原因到底是什么呢?
当byte,char,short类型的变量参与算数运算时,JVM会首先将byte,char,short处理成32位长再进一步操作;也就是说JVM会将byte,char,short变量转换为int类型再继续运算。
关于Java基本数据类型参与+、-、*、/、%运算的时候请注意:
再来看个例子:
public void test7(){
byte b1=3;
byte b2=4;
byte b3=b1+b2;
byte b4=3+4;
}
通过之前的讲解我们已经知道了:byte b3=b1+b2;会报错的
但是byte b4=3+4;为什么是对的呢?因为等号的右侧是两个常量相加并不是两个变量相加;就算写byte b4=300;明显超出byte的范围IDE也是不会报错的。变量所表示的值在运行时才会最终确定,而常量所表示的值在编译期间就已经确定了。
最后,附上文中的测试代码:
package cn.com;
/**
* @Author 原创作者:谷哥的小弟
* @Blog 博客地址:blog.csdn.net/lfdfhl
* @Time 2017年7月13日下午9:45:06
* @Desc 测试java基本数据类型
*/
public class TestDataType {
public static void main(String[] args) {
String arch = System.getProperty("sun.arch.data.model");
System.out.println(arch);
TestDataType testDataType=new TestDataType();
testDataType.test0();
}
public void test0(){
char c='a';
int i=9;
int result=c+i;
System.out.println(result);
int int_a=c;
System.out.println(int_a);
}
public void test1(){
float f=123.45F;
}
public void test2(){
int i=5;
byte b=7;
int result=i+b;
}
public void test3(){
byte b1=4;
byte b2=6;
int b3=b1+b2;
}
public void test4(){
long l=5;
double d=6;
double result=l+d;
}
public void test5(){
int i=9527;
float f=12.35F;
float result=i+f;
}
public void test6(){
short s1=3;
short s2=4;
short s3=0;
s3+=s1;
System.out.println(s3);
}
public void test7(){
byte b1=3;
byte b2=4;
int b3=b1+b2;
byte b4=3+4;
}
public void test8(){
char c='A';
int result=c+6;
System.out.println(result);
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。