Java 类型转换

值类型与引用类型

值类型:

在Java中,值类型表示的是这种数据类型的值代表数据本身。八种基本数据类型就是值类型,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面。

引用类型:

引用类型是通过class来定义的类型,除了八种数据类型之外的所有类型都是引用类型。引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值是存储在内存堆上的。

传递

  • 值传递:基本数据类型的赋值都属于值传递,值传递传递的是实实在在的变量值,是传递原参数的备份,值传递后,实参传递给形参的值,形参发生改变不影响实参。

  • 引用传递:引用传递传递的是地址,形参改变会改变实参变量的值。

类型转换

将一种数据类型(int,float,double等)的值转换为另一种数据类型的过程称为类型转换。

在Java中,有13种类型转换。但是,在本教程中,我们将只关注主要的两种类型。

1、自动类型转换

2、窄化转换

自动类型转换

自动类型转换中,Java自动将一种数据类型转换为另一种数据类型。

示例:将int转换为double

示例

class Main {
  public static void main(String[] args) {
    //创建int类型变量
    int num = 10;
    System.out.println("整数值: " + num);

    //转换为双精度型
    double data = num;
    System.out.println("双精度值: " + data);
  }
}

输出结果

整数值: 10
双精度值: 10.0

在上面的示例中,我们将名为num的int类型变量分配给名为data的双精度类型变量。

在这里,Java首先将int类型数据转换为double类型。然后将其分配给double变量。

自动类型转换的情况下,较低的数据类型(具有较小的大小)将转换为较高的数据类型(具有较大的大小)。因此,没有数据丢失。这就是为什么这种类型的转换会自动发生的原因。

注意:这也称为隐式类型转换

强制类型转换

强制类型转换,我们使用括号将一种数据类型手动转换为另一种数据类型。

示例:将double转换为int

class Main {
  public static void main(String[] args) {
    //创建双精度型变量
    double num = 10.99;
    System.out.println("double 值: " + num);

    //转换为int类型
    int data = (int)num;
    System.out.println("integer 值: " + data);
  }
}

输出结果

double 值: 10.99
integer 值: 10

在上面的示例中,我们将名为num的double变量分配给名为data的int型变量。

注意这一行,

int data = (int)num;

在这里,括号中的int关键字表示num变量被转换为int类型。

强制类型转换的情况下,较高的数据类型(具有较大的大小)将转换为较低的数据类型(具有较小的大小)。因此,存在数据丢失。这就是为什么这种类型的转换不会自动发生的原因。

注意:这也称为显式类型转换

让我们看一下Java中其他类型转换的一些示例。

示例1:从int到String的类型转换

class Main {
  public static void main(String[] args) {
    // 创建int类型变量
    int num = 10;
    System.out.println("整数值为: " + num);

    //将int转换为字符串类型
    String data = String.valueOf(num);
    System.out.println("字符串值为: " + data);
  }
}

输出结果

整数值为: 10
字符串值为: 10

在上面的程序中,注意该行

String data = String.valueOf(num);

在这里,我们使用了Java String类的valueOf()方法将int类型变量转换为字符串。

示例2:类型从字符串(String)转换为整数(int)

class Main {
  public static void main(String[] args) {
    //创建字符串类型变量
    String data = "10";
    System.out.println("字符串值为: " + data);

    //转换字符串变量为int
    int num = Integer.parseInt(data);
    System.out.println("整数值为: " + num);
  }
}

输出结果

字符串值为: 10
整数值为: 10

在上面的示例中,请注意以下行

int num = Integer.parseInt(data);

在这里,我们使用了Java Integer类的parseInt()方法将字符串类型变量转换为int变量。

注意:如果无法将字符串变量转换为整数变量,则会抛出异常 NumberFormatException。

编程笔记 » Java 类型转换