java基础学习笔记原始类型变量赋值与非原始变量赋值

     整日都泡在项目中,某日却忽然发现原来有些基础的东西竟然忘记了,或根本就没有掌握。于是就抽时间来补充一下基础知识,闲暇之余,就把一些东西随手写了出来,其一是方便自己日后翻阅,其二是希望也能对路过此处的初学者给点帮助。
       我们今天讨论java里原始类型(Primitive)的赋值与非原始类型赋值的区别。简单地说,原始对象的赋值是直接拷贝内容过去,比如,int  a = 1; int  b = 2; a=b,则把b的内容直接拷贝到a中,再对a进行操作,不会对b产生影响;而非原始类型赋值则拷贝的是对象的reference,比如,假设Number是一个类,Number a = new Number();Number b = new Number();a=b;这样的话,a指向一个对象,b指向另一个对象,a=b执行后,a和b都指向b曾指向的那个对象,此时操作a仍然可能会对b产生影响,因为她们同时指向同一个对象。并且a=b之后,a原来指向的那个对象则被垃圾回收器回收了。这中行为有一个名词,叫aliasing,即别名效应,但不是我们课题的重点,我们的重点是赋值。
       下面是一个简单的Java应用程序,可以直接运行,此程序演示了非原始类型的变量的赋值。
package  com.china.thinking.datatype;
/**
 * 此例说明对原始类型Primitive赋值和对合成类型赋值是不一样的
 * 对原始类型赋值就直接拷贝值
 * 而对合成类型赋值拷贝的是对象的reference
 * 
@author China.Lee
 * 2007-11-18
 * 在这里我们只是探讨原始类型和非原始类型赋值时的不同
 * 实际上,直接操作对象的成员变量是有违oo原则的
 
*/

public   class  NotPrimitive
{    
    
private Number n1 = null;
    
    
private Number n2 = null;
    
    
public NotPrimitive()
    
{
        
this.n1  = new Number();
        
this.n2 = new Number();
    }

    
    
public static void main(String[] args)
    
{
        NotPrimitive np 
= new NotPrimitive();
        np.n1.i 
= 9;
        np.n2.i 
= 47;
        System.out.println(
"<<<<<<<<<<打印开始>>>>>>>>");
        System.out.println(
"n1.i:--->:" + np.n1.i);
        System.out.println(
"n2.i:--->:" + np.n2.i);
        System.out.println(
"-------------------------");
        np.n1 
= np.n2;
        System.out.println(
"n1=n2-->n1.i:" + np.n1.i);
        System.out.println(
"n1=n2-->n2.i:" + np.n2.i);
        System.out.println(
"-------------------------");
        np.n1.i 
=  27;
        System.out.println(
"n1.i=27-->n1.i:" + np.n1.i);
        System.out.println(
"n1.i=27-->n2.i:" + np.n2.i);
        System.out.println(
"-------------------------");        
        np.aliasingTest(np.n1);
        System.out.println(
"aliasingTest-->n1.i:" + np.n1.i);
        System.out.println(
"aliasingTest-->n2.i:" + np.n2.i);
        System.out.println(
"<<<<<<<<<打印结束>>>>>>>>>");
    }

    
    
public void aliasingTest(Number n)
    
{
        n.i 
= 888888;
    }

}


class  Number
{
    
int i;
}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值