ZKX's LAB

C# 类与String(不是string)都是引用类型,存储在托管堆上,为什么下面的执行结果不同呢??? 引用类型的不可变

2021-03-09知识8

值类型和引用类型的区别,有没有人能给详细解释下。来个高端大牛!

C# 类与String(不是string)都是引用类型,存储在托管堆上,为什么下面的执行结果不同呢??? 引用类型的不可变

这个c#程序输出结果为21 2 1,是因为引用类型跟着变,值类型不跟着变吧,可我在这里有三点疑问, 第一个问题:i.Value+,因为你的变量类型就是IntClass的类型啊,而Value是这个类的成员变量。而i为这个类的实例变量,那么上述语句就是你实例化的类的成员变量Value的自加。第二个问题:它赋给了它自己啊,就是你传进去的参数。这个方法的效果就是把你穿进去的参数值+1.第三个问题:没怎么看明白你的这个问题,但是intValue的值肯定为2,因为执行了Test()方法。

string引用类型,向方法中传完值之后,在主方法中为什么值不会改变 看下面这段代码public class Test0 {public static void change(String s){System.out.println(s);s=\"2;System.out.println(s);}public static void main(String[]args){String s=\"1;change(s);System.out.println(s);}}运行结果为121原因如下:首先要明白String对象的内容不可改变。在main方法中的s是一个引用,s保存了一个内存地址,这个内存地址指向了“1”这个String对象change(s);这行代码将s的内存地址赋值给了下面这段代码中的s变量(这个s与main方法中的s其实是两个不一样的变量,先往下看,最后会解释为什么不一样)public static void change(String s){System.out.println(s);s=\"2;System.out.println(s);}接着看public static void change(String s)第一次打印s,s的地址指向“1”这个String对象,所以打印出来是1而后s的地址指向了“2”(这里注意不是将1修改为2,而是change方法里的s重新指向了\"2\")(所以我说String对象不可变)所以第二次打印打印出来是2最后一次打印的s与上面两次打印的s其实是两个不一样的变量,所以这一个s指向的仍然是\"1\"这个对象,打印的值自然就是1最后说一下main方法里的s与change方法的形参s为什么不。

C#中关于引用类型的小问题 因为string和int是值类型,而int[]是数组,是引用类型,实际上是Array类的不同写法而已,你自己看它的声明方式与类没什么区别。

JavaScript中string类型是引用类型还是基本类型 基本类型在内存中抄具有固bai定的大小,而引用类型则不同。du例如,对象可以具有任zhi意的长度,无固定dao大小。数组也是。基本类型变量存的是数据的具体值,而引用类型变量保存的是值的引用。因此数值、布尔值、null和未定义(undefined)都属于基本类型。对象、数组和函数则属于引用类型。string类型有些特殊,因为字符串具有可变的大小,所以显然它不能被直接存储在具有固定大小的变量中。由于效率的原因,我们希望JS只复制对字符串的引用,而不是字符串的内容。但是另一方面,字符串在许多方面都和基本类型的表现相似,而字符串是不可变的这一事实(即没法改变一个字符串值的内容),因此可以将字符串看成行为与基本类型相似的不可变引用类型

C# 类与String(不是string)都是引用类型,存储在托管堆上,为什么下面的执行结果不同呢??? C#类实例是引用类型没错,所以第一部分的结果很好理解。但是String是一个很特殊的类型,和普通引用类型不一样,是一种不可变类型。简单说,就是每个字符串都占据着一部分内存地址,并且它的值是不可改变的。当给String str1赋值的时候,它并没有改变原来str1指向的字符串的值,而是将str1指向了另一个字符串所在的位置。这次赋值之后,str1和str2所引用的对象已经不同了,查看它们的内存地址可以确认这一点。

C# 中 string不是引用类型吗 为什么传递参数后 它的值没改变 在C#中,有两种类型:引用类型(如:string)和非引用类型(如:int)。引用类型指向的其实是一个内存地址,String 虽然是引用类型 不过是不可变的对字符串做一些操作 比如大小写的转换+实际上是重新创建了一个字符串这也是为什么在做大量字符串拼接的时候要使用StringBuilder 而不用+如:string a=“A”;a+\"B;这时实际上是相当于重新创建了一个string 对象b,b的值是“AB”。

java 中 如果数据域中加了引用类型 那么这个类就不是不可变类么 数据为什么不可以改变了?可以改变的,public void setValues(int[]values){this.values=values;}

C#值类型和引用类型的区别 值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。值类型变量直接把变量的。

为什么用引用类型来传递,但结果值却没有变 呵呵 又见面了 刚才我回答你的问题 你还没给我分呢你别先给楼上分 他们根本就没理解你的意思 一会儿 我给你满意答案已经加你为好友了String类比较特殊 String是常量字符串 在一定意义上是“不可改变”的,我们平常对String的改变 本质上是生成一个新的字符串 然后再把原来的引用 指向新生成的字符串你在class B123中通过形参words把字符串c的引用传入,而 words=words+words完成的工作是生成一个 新的字符串(特别注意)这个字符串的引用为words,而你没有把words的引用赋给c友情提示:尽量不要用这种容易混淆的代码,如果你要使用经常改变的字符串 建议使用 StringBuffer类 他是变量字符串

#java引用类型#引用类型的不可变

随机阅读

qrcode
访问手机版