您的位置:首页 > 编程语言 > Java开发

学习java(一:从Java设计思想看基本数据类型与类型转换)

2014-09-05 22:11 429 查看
我学习计算机语言的顺序是大一学的C,大二学的C++。现在,学习Java。因为C++,Java都是由C发展而来的。所以他们有很多相同之处,但是,由于C++,Java的设计思想不一样,所以,他们也有一些不同之处,我在学习Java的过程中,会尽量比较他们的不同之处。

一、基本数据类型

Java的基本数据类型包括:char,byte,short,int,long,float,double,boolean。

这些关键字,除了byte,C++中都有。但是他们的含义却不相同。

关键字C++Java
byte没有,对应char一个字节
char 一个字节两个字节
short 两个字节两个字节
int2/4个字节4个字节
long4个字节8个字节
float4个字节4个字节
double8个字节8个字节
C++的每种数据类型都有unsigned和有符号之分,而Java中都是有符号的。
通过以上的区别,反映了Java与C++设计的一个不同之处:

Java具有跨平台性,所以,其数据类型是很规范的,不会因为编译器或操作系统不同,数据类型的长度发生变化。

C++在不同的编译器中,可能基本类型的长度会有不同的实现方法。

二、类型转换

Java与C++都有类型转换,并且,都分为强制类型转换与非强制类型转换。这些规则在C++与Java中是相同的。大家可以参考其他资料。这里,我主要讨论,对于类型转换,C++和Java的不同处理方式。

C++会将所有的可能导致错误的类型转换以warning的方式给出,Java将所有可能导致错误的类型转换以error的形式给出。这就是,Java包括的类型检测机制。

至于·Java为什么要这么处理呢?这主要来源于Java的设计思想,Java希望尽最大的可能在编译阶段发现所有的错误,而不是在运行时出错,再去调试找错。(要知道编译是的错误比运行时的错误更好debug)。我们只要了解了Java的这一设计思想,就会很容易的理解Java类型转换的报错机制了。

我们可以将编译器理解为医生,而每个程序就是病人。

最好的医生会将有病的病人诊断为有病(即使病人可能没有症状),没有病的病人诊断为没有病(即使病人有症状)。

而。这样的医生实际上是,不可能存在的。实际生活中主要存在以下两种医生:

C++医生:没有病的病人一定诊断为无病,有病的病人可能会诊断为无病。(不会冤枉一个好人)

Java医生:有病的病人一定会诊断为有病,没有病的病人可能会诊断为有病。(宁可错杀一千,不会放过一个)

至于C++和Java编译器的处理方式哪个更好,那就看你的需求了。

下面举几个例子说明:

short a=15;
short b=a+1;


Java编译器会报错:将int转换为short可能会损失。

这是容易理解的,a+1的类型是int。占有4个字节,short只有两个字节,所以,转换可能会损失数据。所以,Java编译器报错(虽然,我们在实际运行时不会损失)。

short a=15+1;


这段代码按我们之前的考虑:15+1是int型,转换为short可能会损失数据。所以,应该报错。但是,实际上,这段代码没有报错。难道他与我们之前的规则不同吗?仔细思考,我们会发现,他还是遵循我们的报错准则的。首先看“可能”这两个字,15+1转换为short可能会损失数据吗?答案是:不是。15+1转换为short是绝对不会损失数据的,其实编译器在编译阶段,也计算出了15+1转换为short不会损失数据,所以,他没有报错。但,如果把15+1换成更大的常数,编译器会报错。但是要注意,这个报错与之前的报错不是一个性质的。前者是“可能”,后者是一定。

注意:

1、Java的String类型与基本类型的转换问题:

Java有一个运算符:“+”,称为“连接符”,可以连接字符串与其他基本数据类型,返回值为字符串。

C++的类string,也有一个重载的“+”运算符。

但是,相比C++,Java的“+”功能更强大。Java中,只要一个运算符为字符串,即可计算。而,C++中,必须是第一个操作符为字符串时,才可以操作,并且可以操作的基本数据类型只有char。

2、Java中的boolean与C++中的bool有很大的区别。

C++的bool其实就是一个整型,所有非零的数,即为true,0即为false;

Java的boolean与整型无半点关系,只有两个值true和false,并且不能和其他基本数据类型做转换。

总之,C++与Java有很多不同之处,要尽量从Java的设计思想理解这些不同之处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 语言