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


    一、数据类型

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

    1、基本数据类型

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

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

    2、引用数据类型

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

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

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

    1、存储位置

    基本变量类型

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

    引用变量类型

    • 只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
      ps:通过变量地址可以找到变量的具体内容,就如同通过房间号可以找到房间一般
    public class Main{
       public static void main(String[] args){
           //基本数据类型
           int i=1;
           double d=1.2;
           
           //引用数据类型
           String str="helloworld";
       }
    }
    

    2、传递方式

    基本变量类型

    • 在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递
    //基本数据类型作为方法参数被调用
    public class Main{
       public static void main(String[] args){
           int msg = 100;
           System.out.println("调用方法前msg的值:
    "+ msg);    //100
           fun(msg);
           System.out.println("调用方法后msg的值:
    "+ msg);    //100
       }
       public static void fun(int temp){
           temp = 0;
       }
    }
    

    引用变量类型

    • 引用数据类型变量,调用方法时作为参数是按引用传递的,传递的是引用的副本
    //引用数据类型作为方法参数被调用
    
    class Book{
        String name;
        double price;
    
        public Book(String name,double price){
            this.name = name;
            this.price = price;
        }
        public void getInfo(){
            System.out.println("图书名称:"+ name + ",价格:" + price);
        }
    
        public void setPrice(double price){
            this.price = price;
        }
    }
    
    public class Main{
       public static void main(String[] args){
           Book book = new Book("Java开发指南",66.6);
           book.getInfo();  //图书名称:Java开发指南,价格:66.6
           fun(book);
           book.getInfo();  //图书名称:Java开发指南,价格:99.9
       }
    
       public static void fun(Book temp){
           temp.setPrice(99.9);
       }
    }
    

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

    开通博客园来的第一篇博文,有不对的地方请大家多多指正,我将会做出及时更改。

  • 相关阅读:
    VS 2008 和 .NET 3.5 Beta 2 发布了
    搭建.NET 3.0环境
    Expression Studio和Silverlight学习资源、安装问题汇总
    Discuz! NT官方社区
    VS2005中ajax安装指南[转]
    IT人 不要一辈子靠技术生存(转)
    Discuz!NT2.5发布 正式版同步开源
    VS2005下开发Silverlight 1.1翻译加补充
    自动化测试案例
    [原]JavaScript必备知识系列开篇
  • 原文地址:https://www.cnblogs.com/maskwolf/p/9972982.html
Copyright © 2020-2023  润新知