美文网首页
【Rust】Rust和Java的对比--数据类型

【Rust】Rust和Java的对比--数据类型

作者: 小伙纸2022 | 来源:发表于2022-11-17 11:38 被阅读0次

Rust和Java都是一种静态类型的语言。这意味着它必须在编译期知道所有变量的类型

整形

Rust

长度 有符号类型 无符号类型
8bit i8 u8
16bit i16 u16
32bit i32 u32
64bit i64 u64
128bit i128 u128
arch isize usize

Java

长度 有符号类型 无符号类型
8 byte byte
16 short short
32 int int
64 long long

java没有在类型表达上区分有符号或者无符号类型。但是可以使用对应的引用类型调用无符号的操作。例如:Integer的Static methods like compareUnsigned, divideUnsigned。

数字范围

有符号类型规定的数字范围是 -(2^{n-1}) ~ 2^{n-1}-1

无符号类型可以存储的数字范围是0 ~ 2^n-1

重要问题--整型溢出

比方说有一个 u8 ,它可以存放从 0 到 255 的值。那么当你将其修改为范围之外的值,比如 256,则会发生整型溢出integer overflow)。

大于该类型最大值的数值会被“包裹”成该类型能够支持的对应数字的最小值。比如在 u8 的情况下,256 变成 0,257 变成 1,129会变成-127,依此类推。程序不会 panic,但是该变量的值可能不是你期望的值。依赖整型溢出包裹的行为不是一种正确的做法。

浮点型

Rust

f32:32位单精度浮点型

f64:64位双精度浮点型

Java

float:32位单精度浮点型

double:64位双精度浮点型

都按照 IEEE-754 标准表示。

Java中不建议使用float和double表示精确值,例如货币。可以使用java.math.BigDecimal。

布尔型

Rust

布尔类型有两个可能的值:truefalse。布尔值的大小为 1 个字节。

Java

布尔类型有两个可能的值:truefalse。使用1bit存储,长度不固定。JVM 会在编 译时期将 boolean 类型的数据转换为 int,使⽤ 1 来表示 true,0 表示 false。JVM ⽀持 boolean 数组, 但是是通过读写 byte 数组来实现的。

字符型

Rust

char:char(字符)类型是该语言最基本的字母类型。

声明的 char 字面量采用单引号括起来,这与字符串字面量不同,字符串字面量是用双引号括起来。

Rust 的字符类型大小为 4 个字节,表示的是一个 Unicode 标量值。

Java

char:char 数据类型是单个 16 位 Unicode 字符。

Unicode 值的范围为 U+0000 ~ U+D7FFU+E000~U+10FFFF

Java中可以直接使用数字值。

Rust举例:

let string1 = String::from("abcd");
for ele in string1.chars() {
  if ele > 'a' && ele < 'z' {
      println!("{}", ele)
  }
}

Java举例:

String he = "Hello";
for (char c1 : he.toCharArray()) {
  if (c1 > 'a' && c1 < 'z') {
    System.out.println(c1);
  }
}

可以看出,基本数据方面,Rust和Java还是很相似的。

相关文章

网友评论

      本文标题:【Rust】Rust和Java的对比--数据类型

      本文链接:https://www.haomeiwen.com/subject/tjyyxdtx.html