Java对象赋值深度解析:引用、内存地址与里氏替换原理实践
创始人
2024-12-16 03:29:05
0 次浏览
0 评论
Java中请问将一个对象赋值给另一个同类对象,这两个对象是否指向同一堆内存?
对象是引用类型,因此如果将一个对象分配给另一个变量,它实际上只是分配了一个内存地址。
换句话说,如果所有对象都具有相同的地址,则更改该地址的值也会更改具有相同地址的其他对象。
例如Lista=newArrayList();a.add("a");Listb=a;b.add("b");System.out.println(a);//输出:[a,b]这里a和b是同一个地址,但是如果有任务的话,就不会这样了:Stringa="a";Stringb=a;b="b";System.out.println(a);//输出:a虽然这里的b引用指向a,但是后续任务让它指向新地址,改变的并不是原地址的值,所以保持不变。
c#或java里子类对象赋值给父类有什么用,举几个例子啊。
里氏替换原理:定义1:如果对于任何类型为S的对象o1,对象o2的类型为T,使得所有用T定义的程序P都具有类型P,因为所有带有o的对象o1都被行为改变所替换,则S型是T型的子类型。定义2:所有引用基类的地方都可以显式使用其子类的对象。
一般规定是:1.父对象的类型指向实例的类型,上下变换应用里氏替换。
2、性别方面要全面落实性别平等。
无论父类型的对象出现在哪里,都可以用对象类来替换。
这是利斯科夫替换特征的总和。
下面是这两种表现形式的示例。
定义Person抽象类:publicabstractclassPerson{publicabstractStringgetDetails();}使用student类获取PersonpublicclassStudentextendsPerson{privateStringstuName;privateintage;privatedoublescore;public();nt(StringstuName,intage,doublescore){over();this.stuName=stuName;this.age=age;this.score=score;}@OverridepublicStringgetDetails.score;}}可以在测试类中使用:Person=newStudent();//这个变换就起来了。
您还可以定义:Student=newStudent("stu",19,99);PrivateList
java中生成一个对象给他赋值是用构造速度快还是用set方法比较快
取决于您的需求。例如,对于一个User对象,他的名字是必填的,但年龄、性别等不能先填。
然后就可以在构造方法中给名字(name)赋值了。
对于其他非必需项,可以使用set方法。
一般来说,它们都是一样的。
尽管name是必需属性,但您可以先创建一个不带名称的新属性,然后在其后面添加set语句。
但两者之间有细微的差别。
至少当你提供一个需要构造名字的构造函数时,即使别人(使用你代码的人)不知道user是必填属性,由于你强制要求,他也会传入名字,否则编译不会通过。
但如果写成set方法的话,那么不写name是正确的,setName后面不写也是正确的,所以要等到程序运行出错才发现需要setName。
您可能需要找到它,并且故障排除并不像上一个那么简单。
这里的区别非常微妙。
属于代码结构优化层面。
你需要慢慢了解速度。
个人认为是差不多的,所以不用担心。
JAVA中如何把一个类中赋值的变量传递到另一个类中使用
方法如下:在第一个类中创建一个新的A类对象,并将该参数定义为该对象的构造方法的参数。在A中可以使用//NewaclassA来获取这个变量的值。
publicclassMainClassinthisclass{Stringstr="";Aa=newA(str);.........}//ClassprotectedclassA{privateStringstr="";A(Stringstr){this.str=str;}//这里可以正常输出System.out.println("arg="+str);}
上一篇:
Java数字与字符串转换详解及实例教程
相关文章
Java字符串翻转教程:简单代码实现字符...
2024-12-15 12:26:41C语言学习指南:从入门到进阶,实践与资源...
2024-12-18 21:44:06Java编程思想第9版核心电子书PDF免...
2024-12-16 06:50:14Python比较字符与数字大小:理解内置...
2024-12-16 05:18:11Java字符串数字判断方法汇总:正则表达...
2024-12-15 05:20:27Java标识符命名规则与命名约定详解
2024-12-18 15:05:04Java后端开发:核心技术与工作职责解析
2024-12-15 03:59:08Java字符串处理:替换字符与JRE、J...
2024-12-16 05:33:58经典Java手游大盘点:重温儿时回忆,解...
2024-12-21 10:58:11b标题:C语言i++和++i操作详解:揭...
2024-12-18 15:55:03最新文章
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
热门文章
1
SQL多表连接查询全解析:JOIN语句应...
sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...
2
Java中字符串类型详解:String与...
变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...
3
JavaSE与JavaEE:从基础到企业...
javase 和javaee的区别?JavaSE和JavaEE...
4
Java程序员面试必知:核心技术问答与技...
java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...
5
Java.exe与Javaw.exe:区...
程序中java和javaw有什么区别java和javaw的区别:两者都是Java...
6
深入解析:Java中的javax包及其与...
JAVA导入时,什么是javax?awt是java1.0,swing是java2...
7
大专生转行自学Java,迷茫时如何找到方...
我是大专生因没有好好学所以现在后悔了我想从事软件编程我正在自学java不知道怎么...
8
Java中Scanner类导入位置及使用...
在java中这句语言“importjava.util.Scanner;”是什么意...
9
Java数组倒序输出:排序后逆序存储方法...
Java数组倒序输出?1.反转数组的方法有很多种,比如先排序,然后倒序存储pub...
10
C语言改错难题解析:第二处错误详解及修改...
请问这个C语言改错题怎么做呀?我做了很久都没写出来,第二处错误不知道怎么改。那位...