Java中的基本数据类型和引用数据类型的区别

一、数据类型

Java中的数据类型分为两大类,基本数据类型和引用数据类型。

1、基本数据类型

基本数据类型只有8种,可按照如下分类
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean

No.数据类型大小/位可表示数据范围默认值
1byte(字节型)8-128~1270
2short(短整型)16-32768~327670
3int(整型)32-2147483648~21474836470
4long(长整型)64-9223372036854775808~92233720368547758070
5float(单精度)32-3.4E38~3.4E380.0
6double(双精度)64-1.7E308~1.7E3080.0
7char(字符)160~255'\u0000'
8boolean(布尔)-true或falsefalse

2、引用数据类型

引用数据类型非常多,大致包括:
类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型

例如,String类型就是引用类型。
简单来说,所有的非基本数据类型都是引用数据类型。

二、基本数据类型和引用数据类型的区别

1、存储位置

基本变量类型

  • 在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的

引用变量类型

  • 只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
    ps:通过变量地址可以找到变量的具体内容,就如同通过房间号可以找到房间一般

   
   
  1. public class Main{
  2. public static void main( String[] args){
  3. //基本数据类型
  4. int i= 1;
  5. double d= 1.2;
  6. //引用数据类型
  7. String str= "helloworld";
  8. }
  9. }

2、传递方式

基本变量类型

  • 在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递

   
   
  1. //基本数据类型作为方法参数被调用
  2. public class Main{
  3. public static void main(String[] args){
  4. int msg = 100;
  5. System. out.println( "调用方法前msg的值:\n"+ msg); //100
  6. fun(msg);
  7. System. out.println( "调用方法后msg的值:\n"+ msg); //100
  8. }
  9. public static void fun(int temp){
  10. temp = 0;
  11. }
  12. }

引用变量类型

  • 引用数据类型变量,调用方法时作为参数是按引用传递

   
   
  1. //引用数据类型作为方法参数被调用
  2. class Book{
  3. String name;
  4. double price;
  5. public Book(String name,double price){
  6. this.name = name;
  7. this.price = price;
  8. }
  9. public void getInfo(){
  10. System. out.println( "图书名称:"+ name + ",价格:" + price);
  11. }
  12. public void setPrice(double price){
  13. this.price = price;
  14. }
  15. }
  16. public class Main{
  17. public static void main(String[] args){
  18. Book book = new Book( "Java开发指南", 66.6);
  19. book.getInfo(); //图书名称:Java开发指南,价格:66.6
  20. fun(book);
  21. book.getInfo(); //图书名称:Java开发指南,价格:99.9
  22. }
  23. public static void fun(Book temp){
  24. temp.setPrice( 99.9);
  25. }
  26. }

调用时为temp在栈中开辟新空间,并指向book的具体内容,方法执行完毕后temp在栈中的内存被释放掉