java数据类型、存储以及作为方法参数传递
2017-09-14 13:02
603 查看
首先JAVA分两种数据类型:基本数据类型、引用数据类型。基本数据类型:char、boolean、byte、short、int、long、float、double;引用类型则有:类、接口、数组等。
而java关于数据存放的地方有:寄存器(程序不可控)、栈(stack)、堆(heap)、常量区等,这篇文章主要是说栈和堆的存储。大家都知道基本类型对象存储在栈、引用类型对象存储在堆,你还可能知道 引用型对象的引用也在栈中,即Test s = new Test(),中s也是在栈中存储的。那么你有想过 int a=3中这个a存储在哪吗?其实它也是存储在栈中的,你可以把a=3这个当做一起储存在栈中。而引用类型则是由栈中的引用s保存着new
Test()的对象地址,真正对象是存储在堆中的。栈和堆的值都是可以被多个对象引用所指向的这,只需赋值=即可。但是如果修改a和s的值会有不一样的效果,即a=4 则将a引用对象变成4,源对象3是不变的,而如果改变s对象的某个属性或者调用set方法,则其他引用这个对象也会因此改变,除非在设置属性值之前修改s引用所指的对象,即调用new 或者赋值其他对象,那么再对s进行修改就不会影响其他引用该对象。
如果理解了上面,那么对象基本类型和引用类型作为参数进行方法调用也就不在话下。而对于java到底是使用值传递和引用传递。你只需记住,当基本类型作为参数是如func(int a){a=2};int a= 3; func(a),传递的值拷贝,进入func之后等于复制一份对象,里面如果修改都不关外面对象的事,而对于引用类型来说,传递的是引用的拷贝,即新建一个对象引用引用了之前的对象,那么方法内进行属性设置的话,外面的对象也会影响,除非方法内部修改引用拷贝的引用地址(new或者赋值等)。
关于引用传递有一些特例,像String等,其实不光String,还有一些Interger包装类,它们作为参数时,不会被修改。它们是不可变对象,并不是它们是用final修饰所以它们是不可变对象,不可变对象是指对于任何赋值操作都将重新生成一个对象,那不就是等于上面说的除非方法内部修改引用拷贝的引用地址吗。
引用一句话:方法调用的参数传递的实质都是传递栈中变量的一个副本,区别在于两种类型在栈中存放的形式不同。
而java关于数据存放的地方有:寄存器(程序不可控)、栈(stack)、堆(heap)、常量区等,这篇文章主要是说栈和堆的存储。大家都知道基本类型对象存储在栈、引用类型对象存储在堆,你还可能知道 引用型对象的引用也在栈中,即Test s = new Test(),中s也是在栈中存储的。那么你有想过 int a=3中这个a存储在哪吗?其实它也是存储在栈中的,你可以把a=3这个当做一起储存在栈中。而引用类型则是由栈中的引用s保存着new
Test()的对象地址,真正对象是存储在堆中的。栈和堆的值都是可以被多个对象引用所指向的这,只需赋值=即可。但是如果修改a和s的值会有不一样的效果,即a=4 则将a引用对象变成4,源对象3是不变的,而如果改变s对象的某个属性或者调用set方法,则其他引用这个对象也会因此改变,除非在设置属性值之前修改s引用所指的对象,即调用new 或者赋值其他对象,那么再对s进行修改就不会影响其他引用该对象。
如果理解了上面,那么对象基本类型和引用类型作为参数进行方法调用也就不在话下。而对于java到底是使用值传递和引用传递。你只需记住,当基本类型作为参数是如func(int a){a=2};int a= 3; func(a),传递的值拷贝,进入func之后等于复制一份对象,里面如果修改都不关外面对象的事,而对于引用类型来说,传递的是引用的拷贝,即新建一个对象引用引用了之前的对象,那么方法内进行属性设置的话,外面的对象也会影响,除非方法内部修改引用拷贝的引用地址(new或者赋值等)。
关于引用传递有一些特例,像String等,其实不光String,还有一些Interger包装类,它们作为参数时,不会被修改。它们是不可变对象,并不是它们是用final修饰所以它们是不可变对象,不可变对象是指对于任何赋值操作都将重新生成一个对象,那不就是等于上面说的除非方法内部修改引用拷贝的引用地址吗。
引用一句话:方法调用的参数传递的实质都是传递栈中变量的一个副本,区别在于两种类型在栈中存放的形式不同。
相关文章推荐
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- C# 数据类型的引用类型、值类型内存存储方式以及区别; 函数参数传递的引用传递(址传递)、值传递区别
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 如果java中一个方法不知道要传递多少参数也不知道传递过来的是什么类型的数据你会怎么做?
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 学习android JNI的那些事儿--------6. 在java中传入引用数据类型(对象)作为参数
- Java中的原生数据类型和引用类型的参数传递
- Java语言中,以String作为类型的变量在作为方法参数时所表现出的“非对象”的特性。
- JAVA基础知识回顾(基本数据类型,switch参数,equals与==的区别,Object有哪些公用方法)-1
- JAVA中有关byte,int,long这些基本数据类型的存储方式以及负数在JAVA中的表示方式
- 检验 java 基础数据类型参数传递方式
- 关于java基础--基本数据类型封装以及String类方法讲解
- Java中函数参数传递和数据存储
- 重读编程思想-初始化清理-基础数据类型参数传递给过载方法