Java与VC中的基本数据类型的相关知识
java中:
数据类型 |
大小 |
最小值 |
最大值 |
boolean |
|
|
|
byte |
8-bit(一个字节) |
-128 |
+127 |
char |
16-bit(2个字节) |
Unicode 0 |
Unicode 216-1 |
short |
16-bit(2个字节) |
-215 |
+215-1 |
int |
32-bit(4个字节) |
-231 |
+231-1 |
float |
32-bit(4个字节) |
IEEE754 |
IEEE754 |
long |
64-bit(8个字节) |
-263 |
263-1 |
double |
64-bit(8个字节) |
IEEE754 |
IEEE754 |
vc中:
|
Type |
Default Size |
Description |
基 础 类 型
全 是 小 写
|
说明:这些基础数据类型对于MFC还是API都是被支持的 |
||
boolean (数值型) |
unsigned 8 bit , |
取值TRUE/FALSE |
|
byte |
unsigned 8 bit, |
整数,输出按字符输出 |
|
char |
unsigned 8 bit, |
字符 |
|
double |
signed 64 bit |
浮点型 |
|
float |
signed32 bit |
浮点型 |
|
handle_t |
|
Primitive handle type |
|
hyper |
signed 64 bit |
整型 |
|
int |
signed 32 bit |
整型 |
|
long |
signed 32 bit |
整型 |
|
short |
signed 16 bit |
整型 |
|
small |
signed 8 bit |
整型 |
|
void * |
32-bit |
指向未知类型的指针 |
|
wchar_t |
unsigned 16 bit |
16位字符,比char可容纳更多的字符 |
|
|
|
|
|
Win32 API 常 用 数 据 类 型
全 大 写 |
说明: 这些Win32API支持的简单数据类型主要是用来定义函数返回值,消息参数,结构成员。这类数据类型大致可以分为五大类:字符型、布尔型、整型、指针型和句柄型(?). 总共大概有100多种不同的类型, |
||
BOOL/BOOLEAN |
8bit,TRUE/FALSE |
布尔型 |
|
BYTE |
unsigned 8 bit |
|
|
BSTR CComBSTR _bstr_t |
32 bit |
BSTR是指向字符串的32位指针 是对BSTR的封装 是对BSTR的封装 |
|
CHAR |
8 bit |
(ANSI)字符类型 |
|
COLORREF |
32 bit |
RGB颜色值 整型 |
|
DWORD |
unsigned 32 bit |
整型 |
|
FLOAT |
float型 |
float型 |
|
HANDLE |
|
Object句柄 |
|
HBITMAP |
|
bitmap句柄 |
|
HBRUSH |
|
brush句柄 |
|
HCURSOR |
|
cursor句柄 |
|
HDC |
|
设备上下文句柄 |
|
HFILE |
|
OpenFile打开的File句柄 |
|
HFONT |
|
font句柄 |
|
HHOOK |
|
hook句柄 |
|
HKEY |
|
注册表键句柄 |
|
HPEN |
|
pen句柄 |
|
HWND |
|
window句柄 |
|
INT |
-------- |
-------- |
|
LONG |
-------- |
--------- |
|
LONGLONG |
|
64位带符号整型 |
|
LPARAM |
32 bit |
消息参数 |
|
LPBOOL |
|
BOOL型指针 |
|
LPBYTE |
|
BYTE型指针 |
|
LPCOLOREF |
|
COLORREF型指针 |
|
LPCSTR/LPSTR/PCSTR |
|
指向8位(ANSI)字符串类型指针 |
|
LPCWSTR/LPWSTR/PCWSTR |
|
指向16位Unicode字符串类型 |
|
LPCTSTR/LPTSTR/PCTSTR |
|
指向一8位或16位字符串类型指针 |
|
LPVOID |
|
指向一个未指定类型的32位指针 |
|
LPDWORD |
|
指向一个DWORD型指针 |
|
其他相似类型: LPHANDLE、LPINT、LPLONG、LPWORD、LPRESULT PBOOL、PBOOLEAN、PBYTE、PCHAR、PDWORD、PFLOAT、PHANDLE、PINT、PLONG、PSHORT…… 说明:(1)在16位系统中 LP为16bit,P为8bit,在32位系统中都是32bit(此时等价) (2)LPCSTR等 中的C指Const,T表示TCHAR模式即可以工作在ANSI下也可UNICODE |
|||
SHORT |
usigned |
整型 |
|
其他UCHAR、UINT、ULONG、ULONGLONG、USHORT为无符号相应类型 |
|||
TBYTE |
|
WCHAR型或者CHAR型 |
|
TCHAR |
|
ANSI与unicode均可 |
|
VARIANT _variant_t COleVariant |
|
一个结构体参考OAIDL.H _variant_t是VARIANT的封装类 COleVariant也是VARIANT的封装类 |
|
|
|
|
|
|
|
|
|
WNDPROC |
|
指向一个窗口过程的32位指针 |
|
WCHAR |
|
16位Unicode字符型 |
|
WORD |
|
16位无符号整型 |
|
WPARAM |
|
消息参数 |
|
MFC 独有 数据 类型 |
下面两个数据类型是微软基础类库中独有的数据类型 |
||
POSITION |
标记集合中一个元素的位置的值,被MFC中的集合类所使用 |
||
LPCRECT |
指向一个RECT结构体常量(不能修改)的32位指针 |
||
CString |
其实是MFC中的一个类 |
||
|
|
|
Java与C++的差别
1. Java中boolean类型和int类型不兼容,即不能互相转换,而且boolean型的true和fasle是不能比大小的;C++中true == 1; false == 0; (true > flase) == 1;
2. Java中char型是16位的,即两个字节;而C++中的char型是1一个字节即8位的。
3. Java中表达式中char、byte、short类型计算时会自动先转换成int型,即两个byte型相加生成的是int型变量。有以下定义byte b1 = 1,b2 = 2,b3;要将b3赋值成b1和b2的和,必须写成b3 = (byte)(b1 + b2);因为b1+b2是int型的,不强制转换类型编译器会报错。而C中则不会将char、byte、short类型自动转换成int型。
4. Java中常数(即字面值)中,整数是默认int型的,小数是默认double型的。char、byte、short变量可以直接赋值成整数,不改变类型,而long变量赋值时要加上后缀l,float变量赋值小数时要加上后缀f(float赋值不加后缀会报错)。例如long t1 = 20l;float f1 = 2.3f;C++中的类型转换则不是很严格;
5. Java中控制语句的表达式必须是boolean型的,不能是int型的,因为两者不兼容;C++则两者都可;
6. Java中没有指针,申明数组时有Type name[];其中[]里面不能填数字。name有length成员表示数组的大小;C++中数组[]可以填数字进去,一般类型的数组没有length成员。Java中可以初始化如Type name[] = {new Type(), new Type(),…,new Type()};其中简单类型的数组(例如int)可以在{}中直接赋值。C++中简单类型的Java中多维数组以二位数组int型为例,int a[][] = new int [2][],即第二维可以先不申明,然后可以申明不规则数组,即a[0] = new int[1]; a[1] = new int[2]; a[3] = new int [3];C++中高维数组无法动态分配,只能静态分配,因此也无法实现不规则数组
7. Java中继承类中的方法重写时相当于C++中的虚函数,Java中的abstract方法相当于C++中的纯虚函数,Java中含有abstract方法的类必须申明为abstract类,即类前要加上abstract修饰语,此时这个类无法被实例化,而且生成的子类必须重写超类(即父类)的abstract方法,否则子类也不能被实例化,并且要显示地申明为abstract类。C++中不用修饰抽象类。
8. Java中有超类的引用变量可以引用子类的实例,相当于C++基类的指针可以指向派生类的实例。类似的,超类的引用虽然指向了子类,但是在子类中有的成员或者方法却在超类中没有时,超类的引用仍然无法使用。在C++也是如此,使用基类指针生成派生类的对象,但是这个指针指向的成员必须是基类拥有的。
9. Java中String(申明类型时注意S大写)的两个变量str1、str2如果相等,是意味着它们引用的同一个字符串(相当于用同一个内存),若要表示独立的两个变量所含的字符串相同,则String类有方法boolean equals(String str)可以调用。即如果str1.equeals(str)的值为true,则str1与str2所含的字符串相等。String还有一些其他方法:
boolean equals(String str)
如果调用字符串包含的字符序列与str一样,则返回true,
int length()
获取字符串的长度
char charAt(int index)
获取index指定的索引位置的字符
int compareTo(String str)
调用字符串小于str,则返回小于0的数;大于返回大于0的数;相等则返回0
int indexOf(String str)
返回调用字符串中第一个与str匹配的索引,没有匹配则返回-1
int lastIndexOf(String str)
返回调用字符串中最后一个与str匹配的索引,没有匹配则返回-1
C++中如果str1 == str2值为1,则表示str1的字符串与str2的字符串相等,两者可以独立