java基础学习笔记原始类型变量赋值与非原始变量赋值
来源:互联网 发布:npc外观算法 编辑:程序博客网 时间:2024/09/21 08:51
整日都泡在项目中,某日却忽然发现原来有些基础的东西竟然忘记了,或根本就没有掌握。于是就抽时间来补充一下基础知识,闲暇之余,就把一些东西随手写了出来,其一是方便自己日后翻阅,其二是希望也能对路过此处的初学者给点帮助。
我们今天讨论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应用程序,可以直接运行,此程序演示了非原始类型的变量的赋值。
我们今天讨论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;
}
/** *//**
* 此例说明对原始类型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;
}
- java基础学习笔记原始类型变量赋值与非原始变量赋值
- JAVA基础之原始类型变量
- 由浅入深JavaScript2基础-变量和原始类型
- Shell学习笔记---变量赋值与运算
- Lua基础---变量与赋值
- javascript基础笔记(三)之原始类型和声明变量
- Java静态方法间接赋值赋值非静态变量
- SHELL变量赋值基础
- 整数类型变量赋值与码制
- Java语言基础07-变量定义与赋值
- Shell学习笔记---变量赋值与运算---待完善
- Erlang基础 - 变量的语法与赋值
- 学习笔记--JS中变量的赋值(连续赋值)
- Python学习笔记--变量赋值过程
- ES6学习笔记-变量解构赋值
- ES6学习笔记:变量的解构赋值
- Java成员变量赋值
- java变量赋值要求
- 转载:任意移动一个控件
- QQ尾巴+社会工程学+第三方ActiveX插件漏洞=隐藏的危险
- JAVA基础知识--面试题集
- 用Nmap为Windows网络查找漏洞
- maximo在WAS上的奇怪的OutOfMemoryError问题
- java基础学习笔记原始类型变量赋值与非原始变量赋值
- HP面试题总结(六)
- 求助
- HP面试题总结(五)
- enum学习
- DSP下面printf串口输出的实现
- HP面试题总结(二)
- 如何快速算出一个日期是星期几
- 程序员7年和我的7点感想――我的程序人生