java的赋值
来源:互联网 发布:js indexof 数组 编辑:程序博客网 时间:2024/04/29 20:01
Java中变量分两种,一种是对象的引用,另一种是基本类型,对象的引用是通过操作符new出来一个对象,并且把这个对象的句柄(C++中的称呼)赋值给一个变量,基本变量就不多说了,比如int,float, char等等,下面分别解释一下引用和基本类型的赋值:
引用的赋值:
引用就是一个对象的别名,操作这个引用就相当于在操作这个对象,如果有两个变量T1和T2他们都是同一个类new出来的,那么如果T1=T2;执行之后,那么T1和T2都是同一个对象的引用,T1原来指向的对象如果没有其他变量引用,那么它不久之后就会被垃圾回收器回收。所以对一个引用赋值一定要小心,可能会出现一些不可意料的结果。
基本类型的赋值:
基本类型的赋值就非常简单了,就是对一个基本类型进行简单的赋值而已,比如:
Inta = 1;Intb = 2;a =b;
第一步和第二步是一样的,都会在堆栈中生成一个长度为int型长度(java中都是32个字节),第三步的在底层的操作就是把b在堆栈中的内存数据cpy到a所在的内存中,这样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);}}
形参为对象的引用的时候,在方法执行中,b和a引用了同一个对象,那么对b的操作也就是对a的操作,这样说是不确切的,对b的操作和对a的操作都是对它们指向的相同对象操作,a和b的最终的输出结果都是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所在的内存中,所以在执行之后,a和b的值就不同了分别是1和2。
以上就是对引用赋值和对基本变量的赋值的区别,在使用的时候一定要注意。
- java数组的赋值
- java的赋值
- java数组的赋值
- 一种java赋值的方式
- Java的赋值与初始化
- java数组的赋值问题
- Java里面的赋值关系
- [Java]Map的静态赋值
- Java赋值的线程安全问题
- Java子类型的赋值
- JAVA byte赋值的问题
- Java赋值表达式的值
- Java-简单的数组赋值
- JAVA中对象赋值与主数据类型赋值的区别
- Java的主类型赋值以及对象赋值
- * Java 两个 Java bean 之间的赋值
- java 赋值操作符:基本类型的赋值和对象的赋值
- Java的两种赋值的区别
- hihoCoder 1260 String Problem I
- 高斯模糊的算法
- C语言时间函数及结构化数据
- 学习牛人的精神吧
- MyEclipse10在读取XML文件中的数据找不到指定路径
- java的赋值
- DBA解题集:学会数数
- Java基础第一课
- android 4.2 数据库
- ios之核心动画(一)
- 嵌入式Linux系统开发学习步骤
- 牛客网 | 检查是否为BST
- test
- C++标准库容器 vector