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

基本类型:

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

引用类型:

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

举例说明:

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将指向同一内存空间“这一结论

    }
}
时间: 2024-10-30 08:04:04

Java中的基本类型和引用类型变量的区别的相关文章

Java中的基本类型和包装类型区别

首先看一下几个测试题,验证一下java中对基本类型和包装类型的理解,看看最后输出的答案对不对,答案在这篇博客中哦: // 第一题: 基本类型和包装类型 int a = 100; Integer b = 100; System.out.println(a == b); // 第二题: 两个包装类型 Integer c = 100; Integer d = 100; System.out.println(c == d); // 第三题 c = 200; d = 200; System.out.pri

Java中的基本类型和包装类

Java中基本数据类型与包装类型有   基本类型     包装器类型   boolean Boolean char Character int Integer byte Byte short Short long Long float Float double Double 存在基本类型对应包装类的原因: 基本数据类型存方在栈中,效率更高 new出来的对象存在于堆中(通过栈中的引用来使用这些对象),是一个对象,因此具有更多的诸如"转换"的方法 包装类型的意义 Java是一个面相对象的编

java中基本数据类型跟引用数据类型的区别

基本数据类型 大小 范围 默认值 int(整形) 32 -2147483648~2147483648 0 long(长整形) 64 -9233372036854477808~9233372036854477808 0 float(浮点形) 32 -3.40292347E+38~3.40292347E+38 0.0f double(双精度) 64 -1.79769313486231570E+308~1.79769313486231570E+308 0.0d short(短整型) 16 -32768

浅谈Java中的对象和引用

浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做"万物皆对象",这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: "按照通

JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用)的作用.同时我们还将介绍ReferenceQueue和WeakHashMap的功能和使用示例. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. JAVA中的四种引用 四种引用中,软引用.若引用.虚引用都需要相关类来创建.创建的时候

java 中值传递和引用传递(转)

java中给函数传递参数的方式有两种:值传递和引用传递.一般而言,基本类型是值传递:引用类型是引用传递.但传值时到达发生了什么? 1.基本类型 8个基本类型(byte,short,int,long,float,double,char,boolean)是值传递. 1 public class ValueTest { 2 3 public static void main(String[] args) { 4 int a = 10; 5 changeVal(a); 6 System.out.prin

JAVA中MESSAGEBOX,静态类直接引用

原文:JAVA中MESSAGEBOX,静态类直接引用 package cisdi.mes.wrm.mcode.serviceImpl; import javax.persistence.Entity; import javax.swing.JOptionPane; @Entity public class McodeTest { /** * @param <WrmMtlUomClassesTlService> * @param args */ public static void main(S

Java中的四种引用及其应用场景是什么

1.强引用: 通常我们使用new操作符创建一个对象时所返回的引用即为强引用.强引用即使当前的内存不足也不会被回收而是由JVM抛出OutOfMemoryError 错误.如果想要中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象. String str = "hello"; // 强引用 str = null; // 取消强引用 2.软引用 内存空间足够的时候则正常使用,内存空间不足的时候则会被垃圾回收器回收.可用于图片缓存中,

【Java学习笔记之二十九】Java中的&quot;equals&quot;和&quot;==&quot;的用法及区别

Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 System.out.println(str1==str2); 4 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一