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的字符串相等,两者可以独立