A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 专属第三 中级黑马   /  2014-6-23 16:47  /  1731 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 专属第三 于 2014-6-24 22:12 编辑


这里边的第二个图,是用out或者ref传参的时候显示图,此时产生的这个n还是值类型吗?产生了一个地址存储数据和一个指向地址,那么这里的地址在堆中还是在栈中.
如果上述的猜想正确,那么是不是说值类型和引用类型其实都是在内存中开辟了地址和指向地址,不同的是引用类型赋值的时候只传了地址,值类型是将两个一起赋值给别人的
说的语句不是很专业词汇,如果有表达不清楚的请探讨

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

8 个回复

倒序浏览
1. 将一个值类型变量赋值给另一个值类型变量时,将复制包含的值;
2. 引用类型变量的赋值只复制对对象的引用,而不复制对象本身。

点评

这是概念,我懂,对于本题涉及问题,没提到啊  发表于 2014-6-24 20:32
回复 使用道具 举报
对于值类型来说,当其作为函数参数的时候,希望在函数中被修改,那么直接如下操作是不能被修改的:  
public void Increment( int i )  
{   
      i++;  
}   
要想在函数中对传进去的参数做真正的修改,需要借助于ref这个关键字,那么正确的形式如下:
public void Increment( ref int i )   
{     
      i++;   
  }            
也就是说,如果需要在函数中对值类型参数进行修改,需要用ref或者out进行标识才可以

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
首先你这个标题就写错了,应该是值传递和引用传递
平时 我们不用ref和out 属于值传递,那什么是值传递那,就是变量里面的值,这里有很多人会搞错,
值传递
变量里面的值,如果变量存储的是值类型,那么传递的是变量里面存储的具体的值,
如果这个变量存储的是引用类型对象,那么传递的是该对象在对空间中的引用地址
引用传递:
如果你理解了上面我说的,那么下面就简单了
引用传递其实传递的是 变量本身在栈空间中的地址,这里的地址是变量本身的地址

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
这个n 是值类型,开辟在栈空间中,看我上面说明
回复 使用道具 举报
天佑の清清 发表于 2014-6-24 09:19
对于值类型来说,当其作为函数参数的时候,希望在函数中被修改,那么直接如下操作是不能被修改的:  
publi ...

也就是说在这里因为是ref/out,所以传递的虽然是值类型,但是原值还会被修改.这个回答是肯定了n的类型,但是没有分析此时n作为值类型的传参问题
回复 使用道具 举报
本帖最后由 专属第三 于 2014-6-24 22:12 编辑
黑马-柯校 发表于 2014-6-24 09:58
首先你这个标题就写错了,应该是值传递和引用传递
平时 我们不用ref和out 属于值传递,那什么是值传递那, ...


这里其实是我搞混了值类型(引用类型) 与值传递(引用传递)

回复 使用道具 举报
专属第三 发表于 2014-6-24 20:22
也就是说在这里因为是ref/out,所以传递的虽然是值类型,但是原值还会被修改.这个回答是肯定了n的类型,但是 ...

童鞋 我上面写的 你没理解吗?
n是值类型,但是用ref修饰了,是属于引用传递,传递的是变量本身的地址。

变量本身的地址和变量值的地址,不同的概念
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马