ZKX's LAB

引用类型复制

2020-07-17知识26

java里String类型可以直接赋值,保存的是值还是引用的地址? 首先告诉你,java里的String类型保存的就是引用地址,就像你下面说的,如果用String a=\"你好\"这种方式赋值的话,a里会保存一个地址,双引号字符串是常量字符串,在java文件编译的时候就放在虚拟机的常量池中,“你好”的真正位置也是在常量池中,另外还有一种方式:String a=new String(\"你好\"),如果这样写就和第一种不一样了,这个对象是在程序运行时创建,不是创建在常量池而是和其他java对象一样在java堆上创建,因此它的地址和第一种的不用。第二个问题,String和int直接赋值的区别。首先,最大的区别,一个是对象,一个是数值,对象可以为null,数值却必须有值,哪怕你没赋值,系统也会自动赋值为0。int b=3是直接在内存空间分配了一块空间b内容是3,b的内容是可变的,可以变为5,6…而String对象是不可变的,“你好”实际是在堆中存在的,把引用给了a,如果String a=\"bbb\"则是把另一个新的对象\"bbb\"的地址引用给了a,之前的对象“你好”是没有改变的。第三个问题,为什么引用类型赋值不能像基本数据类型呢?因为引用类型远比基本数据类型复杂啊,基本数据类型只有数值、字符、布尔三种数据类型,可以很简单得表示出来,像2、'a'、true这样,赋值也自然容易,c#如何拷贝带有引用类型的对象? 你的意思是问如何“深克隆”?深克隆有两种常见的做e5a48de588b67a6431333262356662法,如果可行,我建议优选序列化。1.手工克隆一个能够保证对象完全按照你所想的那样进行克隆的方式是手工克隆对象的每一个域(field)。这种方式的缺点是麻烦而且容易出错:如果你在类中增 加了一个域,你很可能会忘记更新Clone方法,而且一直要克隆到值类型。例如下面的代码中,克隆Zoo对象,由于Zoo对象中的ZAnimal属性是引用类型,所以需要继续克隆ZAnimal。[Serializable]public class Animal:ICloneable{private string animalName;public string AnimalName{get { return this.animalName;}set { this.animalName=value;}}public Animal(string name){animalName=name;}public Animal(){ }public object Clone(){Animal newAnimal=new Animal();newAnimal.AnimalName=this.AnimalName;return newAnimal;}}[Serializable]public class Zoo:ICloneable{private string zoonName;private Animal animal;public string ZooName{get { return this.zoonName;}set { this.zoonName=value;}}public Animal ZAnimal{get { return this.animal;}set { thisjava 在引用类型赋值的时候怎么能不给地址?直接赋值呢? Java中的引用类型类似于指针,基本类型可以直接赋值,而引用类型是将引用指向一块内存。比如:Person p=new Person();我们都知道在Java中new的东西会在内存中开辟一块内存,左边是指向这块内存的引用。我理解中你说的直接赋值应该是类似于:int i=1;double b=2;boolean a=false;这种是因为他们是基本类型,不算是一个对象。曾经在一本书上看到过,如果Java直接舍弃这些基本类型,可能会是一门更加纯粹的OOP语言。是否所有引用类型都可以进行深度复制? 当然不是,这要看改类型提供这个方法没有~?object 类型的对象就没有这个功能~Java值类型和引用类型,以及复制的是什么东西 java 中的数据类型分为两大类:值类型(基本数据类型)和引用类型(复合数据类型)一,值类型分为 1,整数类型(byte,short,int,long)2,浮点类型(float,double)3,布尔类型(boolean)4,字符类型(char)二,引用值类型 除了值类型外就是引用值类型了,引用值类型有1,类类型(class)2,数组 3,接口类型(interface)关于复制的是什么?我还真不知道。C#中引用类型和值类型的浅度复制和深度复制的问题? 有点想复杂了吧?其实很好理解,public int Val;明显是值类型,所以要“逐位复制”也就是说 myTarget 最终会有自己的存放Val的地址把引用类型赋值给另一个是共用一个内存区域,为什么number都是1 引用只是一个别名,类似于指针c# 怎么给引用类型数组,全部赋值Null? 最简单的语法已经被你忽略了,你定义param 后,它就已经是null了,根本就不需要手动去改。以下是调试信息:param[0]nullparam[1]null在C#中引用类型变量的赋值只复制对象的引用,而不复制对象本身是什么意思 这个其实就是所谓的浅复制,其实你可以理解为只是对这个变量进行了引用而不是对这个对象进行了复制,用指针的概念理解就是,复制的这个对象其实只是复制了它的引用地址,让他们同时指这个地址,而不是重新创建一片新的储存地址来放你这个复制的变量值c#怎么给引用类型数组,全部赋值Null 不用啊 比如 string[]就是个引用类型数组,直接 string[]mystrarr=new string[5];mystrarr下面 就自然都是null了。根本不用挨个赋值

#string#引用类型

随机阅读

qrcode
访问手机版