学习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++的每种数据类型都有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编译器的处理方式哪个更好,那就看你的需求了。
下面举几个例子说明:
Java编译器会报错:将int转换为short可能会损失。
这是容易理解的,a+1的类型是int。占有4个字节,short只有两个字节,所以,转换可能会损失数据。所以,Java编译器报错(虽然,我们在实际运行时不会损失)。
这段代码按我们之前的考虑: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的基本数据类型包括:char,byte,short,int,long,float,double,boolean。
这些关键字,除了byte,C++中都有。但是他们的含义却不相同。
关键字 | C++ | Java |
---|---|---|
byte | 没有,对应char | 一个字节 |
char | 一个字节 | 两个字节 |
short | 两个字节 | 两个字节 |
int | 2/4个字节 | 4个字节 |
long | 4个字节 | 8个字节 |
float | 4个字节 | 4个字节 |
double | 8个字节 | 8个字节 |
通过以上的区别,反映了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学习------基本数据类型转换
- java学习-JAVA基本排序法示例,JAVA数据类型转换 ,ArrayList用法,Calendar 简单应用
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- Core Java 学习笔记——2.基本数据类型&类型转换
- Java基本学习(一)——Java中的数据类型、类型转换
- java与.net比较学习系列(3) 基本数据类型和类型转换
- 黑马程序员J_ava学习笔记_Java中的基本数据类型转换详解
- Java学习笔记四。设计模式、基本数据类型、包装类、异常、断言、包、访问权限、命名规范、jar
- [bxd学习java基本点]1.基本数据类型与字符串型转换与其他类型转成字符串
- 黑马程序员-JAVA学习笔记-基本数据类型及其转换
- 【JAVA学习】java基本数据类型与字符串之间的转换(基本数据类型、对象封装类、自动装箱、自动拆箱)
- java学习之旅10--基本数据类型自动转换_强制转型_类型提升问题
- Java学习6——基本数据类型及其转换
- JAVA基本数据类型与其他语言数据类型之间的转换方法
- java基本数据类型转换
- java 基本数据类型之间的转换
- Java基础学习笔记(一)基本数据类型
- Java基础小知识——基本数据类型和字符串以及字节数组的转换
- java基本数据类型转换