java的赋值

来源:互联网 发布:js indexof 数组 编辑:程序博客网 时间:2024/04/29 20:01

Java中变量分两种,一种是对象的引用,另一种是基本类型,对象的引用是通过操作符new出来一个对象,并且把这个对象的句柄(C++中的称呼)赋值给一个变量,基本变量就不多说了,比如int,float, char等等,下面分别解释一下引用和基本类型的赋值:


引用的赋值:

引用就是一个对象的别名,操作这个引用就相当于在操作这个对象,如果有两个变量T1T2他们都是同一个类new出来的,那么如果T1=T2;执行之后,那么T1T2都是同一个对象的引用,T1原来指向的对象如果没有其他变量引用,那么它不久之后就会被垃圾回收器回收。所以对一个引用赋值一定要小心,可能会出现一些不可意料的结果。

基本类型的赋值:

基本类型的赋值就非常简单了,就是对一个基本类型进行简单的赋值而已,比如:

Inta = 1;Intb = 2;a =b;

第一步和第二步是一样的,都会在堆栈中生成一个长度为int型长度(java中都是32个字节),第三步的在底层的操作就是把b在堆栈中的内存数据cpya所在的内存中,这样a,b的值是一致的。


说到这,简单的说一下方法的形参分别是对象的引用和基本变量时,方法调用的时候会出现什么情况呢。


在说这个之前,先说一下方法调用的时候,其中对形参会做什么操作呢?

比如下面的代码:

int func(int b){  b++;  return b;}  int main(){  int a=1;  int c = func(a);  print(c);
  return 0;}


不管这个形参是基本类型还是引用,在方法调用的时候,都会执行赋值操作,也就是b=a;这个操作,那么就可以回归到上面的说明。

形参为对象的引用时:

如下代码:

class Test{publicint ele;};public classMain {publicstatic Testfunc(Test a) {a.ele++;returna;}publicstatic voidmain(String[] args){Test a = newTest();a.ele= 1;Test b = func(a);System.out.println(a.ele);System.out.println(b.ele);}}

形参为对象的引用的时候,在方法执行中,ba引用了同一个对象,那么对b的操作也就是对a的操作,这样说是不确切的,对b的操作和对a的操作都是对它们指向的相同对象操作,ab的最终的输出结果都是2

形参为基本类型的时:

如下代码:

public classMain {publicstatic intfunc(int a){a++;returna;}publicstatic voidmain(String[] args){inta = 1;intb = func(a);System.out.println(a);System.out.println(b);}}


由于基本类型的赋值是真的赋值操作,在内存基本上,就是copy变量b所在的内存数据到a所在的内存中,所以在执行之后,ab的值就不同了分别是12


以上就是对引用赋值和对基本变量的赋值的区别,在使用的时候一定要注意。

0 0
原创粉丝点击