Java中的基本类型和引用类型变量的区别

原创 2007年09月26日 15:57:00

基本类型:

基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。

引用类型:

是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。 

举例说明:   

 int  a;  
 a=250; //声明变量a的同时,系统给a分配了空间。

引用类型就不是了,只给变量分配了引用空间,数据空间没有分配,因为谁都不知道数据是什么,整数,字符?我们看一个错误的例子:

MyDate today;

today.day = 4; //发生错误,因为today对象的数据空间未分配。

那我们怎么给它赋值?引用类型变量在声明后必须通过实例化开辟数据空间,才能对变量所指向的对象进行访问。举个例子:

MyDate today;            //将变量分配一个保存引用的空间

today = new MyDate();     //这句话是2步,首先执行new MyDate(),给today变量开辟数据空间,然后再执行赋值操作

//引用变量赋值

MyDate a,b;                    //在内存开辟两个引用空间

a  =  new MyDate();     //开辟MyDate对象的数据空间,并把该空间的首地址赋给a

b  =  a;                               //将a存储空间中的地址写到b的存储空间中

如下图示

引用传递 和 值传递

引用类型:除了在函数传值的时候是"引用传递",在任何用"="向对象变量赋值的时候都是"引用传递"。

值传递:基本类型的传递都属于值传递,和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的函数体内部的操作都是针对这个拷贝的操作,函数执行结束后,这个局部变量也就完成了它的使命,它影响不到作为输入参数的变量。这种方式的参数传递被称为"值传递"。

/*define a class*/
class MyDate{
    String  Year;
    String  Month;
    String  Day;
    String  Date;
    public MyDate(){
        Year = "1900";
        Month ="01";
        Day = "01";
        Date = Year + "." + Month + "."+ Day;
    }
     public String toString(){
        return Date;
    }   
}

public class ObjRef{  
   MyDate mydate1 = new MyDate();
   MyDate mydate2 = mydate1;// = 使 mydate1和 mydate2将指向同一内存空间
   //MyDate mydate2 = new MyDate();//从新new一个对象,则mydate1和mydate2是指向不同的内存空间的:
                                  //引用空/间和数据空间都不一样
   public void changeObj(MyDate inObj){
        inObj.Date = "2007.09.26";
    }
      
    public static void main(String[] args) {
        ObjRef oRef = new ObjRef();
        System.out.println("Before call changeObj() method: " + oRef.mydate1);
        oRef.changeObj(oRef.mydate1);
        System.out.println("After call changeObj() method: " + oRef.mydate1);
        System.out.println("After call changeObj() method: " + oRef.mydate2);//验证“= mydate1和 mydate2将指向同一内存空间“这一结论
      
    }
}

相关文章推荐

引用类型和基本类型区别

今天明白了一个困扰很久的问题:引用类型和基本类型的区别与联系 要明白这个问题,首先需要理解堆栈的概念。那什么又是堆栈,有什么区别和联系呢? 堆:首先堆是动态分配的,JVM并不会自动释放这部...

Java中基本类型与引用类型的区别

基本类型:存放在栈空间中,未初始化时为随机值。 引用类型:存放在堆空间中,未初始化时有默认的值。比如int未初始化时为0,boolean未初始化时为false。 这里在引用java中栈与堆的介绍。...

Java对象和引用变量

对于引用变量的深层含义,未必在初学的时候就能深刻理解, 所以理解好下面这两句话的真正含义非常重要Case cc=new Case();Case cc; cc=new Case(); 1.先搞清楚什么...

java中引用变量

String s = new String("abc");创建了几个String Object? 引用变量与对象的区别; 字符串文字"abc"是一个String对象; 文字池(pool of l...
  • yufaw
  • yufaw
  • 2012年06月21日 14:08
  • 2812

java引用变量和堆栈

先了解具体的概念: JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。...

C语言支持的四种变量存储类型

一)auto:auto称为自动变量(局部变量)。局部变量是指在函数内部说明的变量(有时也称为自动变量)。所有的非全程变量都被认为是局部变量,所以auto实际上从来不用。局部变量在函数调用时自动产生,但...

引用类型和基本类型区别

今天明白了一个困扰很久的问题:引用类型和基本类型的区别与联系 要明白这个问题,首先需要理解堆栈的概念。那什么又是堆栈,有什么区别和联系呢? 堆:首先堆是动态分配的,JVM并不会自动释放这部分内存。...

Java基本数据类型&引用类型总结

java 基本数据类型 Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

JAVA类的方法调用和变量(全套)

一、类的分类: 1.普通类 2.抽象类(含有抽象方法的类) 3.静态类(不需要实例化,就可以使用的类) 二、方法的分类: 1、私有方法(只有类的内部才可以访问的方法) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的基本类型和引用类型变量的区别
举报原因:
原因补充:

(最多只允许输入30个字)