C++变量类型对应Java 8
以下是一个C++基础变量类型与Java 8对应关系的演示代码,包含详细注释:
#include <iostream>
#include <string> // C++字符串
#include <cstdint> // 固定宽度整数类型
int main() {
// ===== 基础类型对应关系 =====
// 布尔类型(1字节)
// Java对应: boolean (实际JVM中用1字节存储)
bool cppBool = true;
// 字符类型(1字节,有符号)
// Java对应: byte (但Java的char是16位无符号)
char cppChar = 'A';
// 宽字符(2或4字节,平台相关)
// Java对应: char (固定2字节无符号)
wchar_t cppWideChar = L'中';
// 短整型(2字节,有符号)
// Java对应: short (完全对应)
short cppShort = 32767;
// 整型(通常4字节,有符号)
// Java对应: int (完全对应)
int cppInt = 2147483647;
// 长整型(4或8字节,平台相关)
// Java对应: int (如果cpp long是4字节) 或 long (如果cpp long是8字节)
long cppLong = 2147483647L;
// 长长整型(8字节,有符号)
// Java对应: long (完全对应)
long long cppLongLong = 9223372036854775807LL;
// 单精度浮点(4字节)
// Java对应: float (完全对应)
float cppFloat = 3.14f;
// 双精度浮点(8字节)
// Java对应: double (完全对应)
double cppDouble = 3.1415926535;
// ===== 无符号类型(Java没有直接对应类型)=====
unsigned char cppUChar = 255; // Java可用: short 替代
unsigned int cppUInt = 4294967295U; // Java需用: long 替代
// ===== 固定宽度类型(C++11)=====
// Java对应: 通过基本类型包装类实现(如java.lang.Integer)
int32_t fixed32 = 100; // Java: int
uint64_t fixed64 = 100ULL; // Java: long
// ===== 字符串类型 =====
// Java对应: String (但C++字符串可变,Java字符串不可变)
std::string cppStr = "Hello";
// ===== 数组类型 =====
// Java对应: 数组声明语法不同
int cppArray[5] = {1,2,3,4,5}; // Java: int[] javaArray = {1,2,3,4,5};
// ===== 输出验证 =====
std::cout << "=== 类型大小验证 ===" << std::endl;
std::cout << "bool: " << sizeof(cppBool) << " bytes" << std::endl;
std::cout << "char: " << sizeof(cppChar) << " bytes" << std::endl;
std::cout << "wchar_t: " << sizeof(cppWideChar) << " bytes" << std::endl;
std::cout << "long: " << sizeof(cppLong) << " bytes" << std::endl;
return 0;
}
主要类型对照表(补充说明)
C++ 类型 | Java 8 对应类型 | 关键差异说明 |
---|---|---|
bool |
boolean |
C++用1字节存储,Java虚拟机规范未明确大小 |
char |
byte |
C++ char可能有符号,Java char是16位无符号 |
wchar_t |
char |
Java char固定2字节,C++宽字符大小平台相关 |
short |
short |
完全一致(2字节有符号) |
int |
int |
完全一致(4字节有符号) |
long |
int 或 long |
取决于平台(Windows通常4字节,Linux 8字节) |
long long |
long |
完全一致(8字节有符号) |
float |
float |
IEEE 754单精度(4字节) |
double |
double |
IEEE 754双精度(8字节) |
unsigned 系列 |
无直接对应 | Java需用更大类型或特殊处理 |
std::string |
String |
C++可变,Java不可变 |
需要注意的差异点:
-
类型大小确定性:
- Java所有基本类型大小固定(如
int
永远4字节) - C++的
long
和指针类型大小与平台相关
- Java所有基本类型大小固定(如
-
无符号类型:
- Java没有无符号类型(
char
是唯一的16位无符号类型) - 当处理C++无符号类型时,Java需要用更大的有符号类型存储
- Java没有无符号类型(
-
字符编码:
- C++的
char
用于存储ASCII/字节数据 - Java的
char
直接支持Unicode(UTF-16)
- C++的
-
内存管理:
- C++需要手动管理原始数组内存
- Java数组是对象,由JVM自动管理
典型转换场景示例:
- C++
unsigned int
→ Javalong
- C++
char[256]
→ Javabyte[]
- C++
wchar_t*
→ JavaString
(需要编码转换) - C++
long
(Windows) → Javaint
通过这个对照可以更安全地进行跨语言数据交互(如通过JNI)。建议实际开发时使用固定宽度类型(如int32_t
)来确保跨平台一致性。
作者:ukyo--碳水化合物
出处:https://www.cnblogs.com/ukzq/p/18718580
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2023-02-16 关于解决activemq jmx连接获取连接数等信息问题记录
2023-02-16 清醒时刻记14
2020-02-16 阿里云主机创建swap分区
2020-02-16 gitlab邮箱发送
2020-02-16 Whoops, GitLab is taking too much time to respond.