21xrx.com
2024-12-23 01:39:53 Monday
登录
文章检索 我的文章 写文章
Java中基本数据类型和引用类型的区别及代码案例
2023-06-12 13:00:07 深夜i     --     --
Java 基本数据类型 引用类型

在Java编程中,数据类型是一个非常重要的概念。Java中的数据类型可以分为基本数据类型和引用类型两种。基本数据类型是指Java语言内置的8种数据类型,包括byte、short、int、long、float、double、char和boolean。而引用类型则是指对象、数组等引用型变量。那么基本数据类型和引用类型有什么区别呢?下面我们将从几个方面来分析。

1.内存分配方式不同

在Java中,基本数据类型的变量实际上是存储在栈内存中的。而引用类型的变量则是在栈内存中存储一个地址,而对象本身则存储在堆内存中。

我们来看一个示例代码:


public class DataTypeDemo {

  public static void main(String[] args)

    int a = 10; // 基本数据类型

    String s = "hello"; // 引用类型

  

}

上面的代码中,变量a是一个基本数据类型的变量,而变量s则是一个引用类型的变量。在运行时,变量a所占用的空间大小是4字节,它的值直接存储在栈内存中;而变量s所占用的空间大小是4字节(32位JVM)或8字节(64位JVM),它存储的是字符串"hello"在堆内存中的地址。

2.传递方式不同

对于基本数据类型,它们的传递方式是值传递。这意味着当把一个基本数据类型作为参数传递给一个方法时,它实际上传递的是该变量的值,而不是该变量本身。

对于引用类型,它们的传递方式是引用传递。这意味着当把一个引用类型作为参数传递给一个方法时,它实际上传递的是该对象的地址,而不是对象本身。所以,在方法中对引用类型的修改会影响到原始对象。

我们来看一个示例代码:


public class DataTypeDemo {

  public static void main(String[] args) {

    int a = 10;

    Student s = new Student("张三", 18);

    modify(a, s);

    System.out.println(a); // a的值不变,输出10

    System.out.println(s); // s的属性被修改,输出“张三2号,19岁”

  }

  public static void modify(int a, Student s) {

    a += 1;

    s.setName(s.getName() + "2号");

    s.setAge(s.getAge() + 1);

  }

}

class Student {

  private String name;

  private int age;

  public Student(String name, int age)

    this.name = name;

    this.age = age;

  

  public String getName()

    return name;

  

  public void setName(String name)

    this.name = name;

  

  public int getAge()

    return age;

  

  public void setAge(int age)

    this.age = age;

  

  public String toString() {

    return this.name + "," + this.age + "岁";

  }

}

在上面的代码中,我们定义了一个modify方法,该方法分别对基本数据类型和引用类型做了修改操作。我们可以看到,在main方法中修改基本数据类型a的值并不会影响原始值,而修改引用类型s的属性却可以影响到原始对象。

3.默认值不同

在Java中,基本数据类型的变量在定义时如果没有初始化,会有一个默认值。而引用类型的变量则默认为null。

我们来看一个示例代码:


public class DataTypeDemo {

  public static void main(String[] args) {

    int a;

    String s;

    System.out.println(a); // 编译出错,未初始化

    System.out.println(s); // 输出null

  }

}

在上面的代码中,定义了一个基本数据类型的变量a和一个引用类型的变量s,并未对它们进行初始化操作。当我们尝试输出它们的值时,会发现基本数据类型编译出错,而引用类型输出了null。

综上,Java中基本数据类型和引用类型有以下区别:

1.内存分配方式不同

2.传递方式不同

3.默认值不同

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复