Solidity数据类型全解析:从值类型到引用类型 - 实践
这是一个非常全面的 Solidity 数据类型列表。下文将对这些类型进行详细的、系统化的讲解,并辅以代码示例,特别会澄清一些容易混淆的概念。
一、值类型
值类型在赋值或传递参数时,总是进行值拷贝。这意味着修改副本不会影响原始数据。
1. 布尔类型 (bool)
- 取值:
true或false。 - 运算符:
- 逻辑运算符:
!(逻辑非),&&(逻辑与),||(逻辑或)。 - 比较运算符:
==(等于),!=(不等于)。
- 逻辑运算符:
- 重要提示: Solidity 不支持其他类型到
bool的隐式转换(不像 JavaScript 或 C)。
bool public isActive = true;
bool public isCompleted = false;
function logicOperations(bool a, bool b) public pure returns (bool, bool, bool) {
return (!a, a && b, a || b); // 逻辑非、与、或
}
2. 整型 (int / uint)
这是最常用的类型。
uint: 无符号整数,表示非负数。int: 有符号整数,表示正数、负数和零。- 大小: 从 8 到 256,以 8 为步长(如
uint8,uint16, …,uint256)。 uint和int是uint256和int256的别名。- 运算符:
- 比较:
<=,<,==,!=,>=,>(返回bool) - 位运算:
&(与),|(或),^(异或),~(按位取反) - 算术:
+,-,*,/,%(取模),**(幂) - 移位:
<<(左移),>>(右移)
- 比较:
uint8 public count = 255;
int public balance = -100;
function demo() public view {
// 溢出检查(Solidity ^0.8.0+)
// uint8 max = 255;
// count = max + 1; // 这会导致交易回滚 (REVERT)
// 使用 unchecked 块禁用溢出检查(节省Gas,但需谨慎)
unchecked { count = count + 1; } // 结果: 0
}
3. 地址类型 (address)
存储一个 20 字节的 Ethereum 地址。
address: 普通地址。address payable: 可支付地址,比address多两个成员:transfer和send。用于接收 Ether。
浙公网安备 33010602011771号