Java 和 Go 语言中的字面量(literals)在概念上是相似的,都是表示固定值的符号表示形式。然而,它们在语法和支持的类型上有一些区别:
-
整数字面量:
-
Java : 整数字面量可以是十进制、十六进制或二进制。Java 7 引入了二进制字面量表示法。
javaint decLiteral = 123; // 十进制 int hexLiteral = 0x7B; // 十六进制 int binLiteral = 0b1111011; // 二进制(Java 7及以上)
-
Go : 整数字面量同样可以是十进制、十六进制或二进制。Go 语言也支持指定整数的大小(如
int
,int8
,int32
,int64
,uint
,uint8
,uint32
,uint64
)。govar decLiteral int = 123 // 十进制 var hexLiteral int = 0x7B // 十六进制 var binLiteral int = 0b1111011 // 二进制 var bigLiteral int64 = 0x123456789ABCDEF // 大整数
-
-
浮点数字面量:
-
Java : 浮点数字面量通常带有小数点,可以是十进制或科学计数法。
javadouble floatLiteral = 123.45; // 十进制 double sciLiteral = 1.23e4; // 科学计数法
-
Go : 浮点数字面量同样可以是十进制或科学计数法,并且 Go 语言区分
float32
和float64
。govar floatLiteral float64 = 123.45 // 十进制 var sciLiteral float64 = 1.23e4 // 科学计数法
-
-
字符串字面量:
-
Java : 字符串字面量用双引号表示。
javaString str = "Hello, World!";
-
Go : 字符串字面量可以用双引号或反引号(表示原始字符串)。
govar str string = "Hello, World!" // 双引号 var rawStr string = `Hello, World!` // 反引号,包含特殊字符
-
-
布尔字面量:
-
Java : 布尔字面量是
true
和false
。javaboolean flag = true;
-
Go : 布尔字面量同样是
true
和false
。
-
-
字符字面量:
-
Java : 字符字面量用单引号表示,可以是 ASCII 字符或 Unicode 字符。
javachar ch = 'A'; char unicodeChar = '\u0041';
-
Go : 字符字面量也用单引号表示,可以是 ASCII 或 Unicode。
govar ch rune = 'A' // rune 是 Go 中表示 Unicode 字符的类型 var unicodeChar rune = '\u0041'
-
-
空字面量:
-
Java : 空字面量是
null
。javaString nullStr = null;
-
Go : 空字面量是
nil
。govar nilStr *string = nil
-
-
复合字面量:
-
Java : 从 Java 9 开始,支持使用菱形符号
<>
来声明和初始化泛型实例。javaList<String> list = new ArrayList<>();
-
Go : 支持使用花括号
{}
来创建数组、切片、映射和结构体的复合字面量。govar arr [3]int = [3]int{1, 2, 3} var slice []int = []int{1, 2, 3} var mapVal map[string]int = map[string]int{"one": 1, "two": 2} var structVal struct{Name string; Age int} = struct{Name: "Alice", Age: 30}
-
尽管两种语言在字面量的表示上有许多相似之处,但它们在类型系统、语法和一些特定字面量的使用上有所不同。