java中的基本数据类型与c语言中的有什么样的区别?
文章目录
引入
我们都知道c生万物,但很多语言都是在它的基础上从而产生的,java也和c语言在某些方面有相似的地方,今天我们就来谈谈java在c语言的基础上进行了怎样的改变。今天我们要聊的方向是数据类型。相信大家都能对c语言的的基本数据类型(char,short,int ,long ,long long ,float,double)以及它们各自所占的字节数倒背如流了,c语言毕竟还是咋们大多数学习编程的“初恋”,谁会不记得初恋的一些基本特征了?我们接下来一一对比一下java中与之对应的数据类型的相同与不同吧!
char
char在c语言中在内存中占用的是一个字节(8个bit位),在java中它占用的是两个字节,为什么了?我们首先从它的空间进行发掘,2个字节,16个bit位,共可表示2^16个数据,虽然java中都是有符号数,但是它要特别一点,只有正数。其次我们来分析一下它为什么会占用更多的空间。c语言采用的ASCII编码,编码了0-127的字符,这些数据对于后来的需求就有点跟不上了,后来就采用了Unicode编码,包含了更多国家的语言,从而使用的更加广泛。我们来看一个例子:
char c = '陈';
int k = c;
// k用来查找字符‘陈’在Unicode中的编码
System.out.println(k);
System.out.println(c);
控制台输出:
byte
和c中的char没啥区别,区别的话可能名字不同吧。我们找一个在ASCII编码范围内的数据来测试一下a:
char c = 97; int k = c; byte m=97; int z=m; System.out.println(k); System.out.println(z); System.out.println(c);
输出:
short,int,long
同c中的short!
short s = 15; System.out.println(s); System.out.println(Short.MAX_VALUE); System.out.println(Short.MIN_VALUE);
同样只有有符号数,输出如下:
同c中的int!
int i = 9; System.out.println(i); System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_VALUE);
同样只有有符号数,输出如下:
long占用8个字节,64个比特位,表示范围是-263-263-1;
long l = 15L; System.out.println(l); System.out.println(Long.MAX_VALUE); System.out.println(Long.MIN_VALUE);
同样只有有符号数,输出如下:
float,double
对于java中的float,double,所占用的空间相对于c语言来说是没有变化的,所采用的存储规则,同样采用IEE754标准来进行存储(简单解释一下,任何的浮点数我们都可以表示成(-1)^S * M * 2^E,s=0表示位正数,s=1表示为负数,这也对应了在内存中的存储,M表示有效数字,E表示指数位,然后将这个浮点数对应32/64位机器转换位二进制序列,内存中存储的就是这样的二进制序列,这样也就能就是为什么浮点数为什么不精确了,对这一块感兴趣的小伙伴可以去了解下。)它们也可以强转为整形之类,但是只能保留整数部分,切记不是四舍五入!!!
还有一点需要注意的就是,java是一种强类型的语言,举个栗子,我们写一个小数3.14,默认情况下是double类型的,如果我们需要赋值给一个float类型的数据,因为double所占用的空间更大,所以可能会数据的丢失(当然3.14肯定不会),那么编译器就会提醒我们是不是要确定我们的选择了,是的话就确认吧(强转)。
编译不过:
强转:
这看起来好像也没什么,但是c语言撑死给你报个警告,编译是能通过的。好吧,我错了,啥也没有…
是不是更能体会到java的 严谨了?
boolean(布尔)
这和c语言有比较大的不同了,c中是0为假,非0为真,但在Java中是存在这样表示真假的一种类型的,这种类型只有两个值,true和false,并且这两种类型不能和类型转化,哥是个高冷的美男子!
类型转换
和c似乎也大差不差,分为隐式类型转换和显式类型转换,总结起来就是小的转大的为隐式,大的转小的就显式,然后小的类型在不足4个字节的在进行运算要进行整形提升,因为cpu在内存中读取数据基本是按照4个字节一次来进行读取的。
小结
对比学习确实能让我们能更快的记住新鲜事物的一些特点,以上的内容我是我觉得比较重要的,比较精简,大多数是我自己的一些理解,可能会有误差甚至错误,欢迎大家在评论区指正,小编虽菜,知识无罪!😒