关于JAVA中的引用赋值和值赋值 案例1
输出:不同 案例2 输出:相同 有人能给我解释一下这些计划的结果吗?关于JAVA中的引用赋值和值赋值 案例1,java,Java,输出:不同 案例2 输出:相同 有人能给我解释一下这些计划的结果吗? 第一种情况创建两个不同的对象,每个对象在内存中都有自己的引用/实体。同一类中的实例,但无论如何都是不同的对象 在第二种情况下,将相同的对象引用分配给新的狗实例:它们都引用相同的对象 操作符比较对象的引用。在第二种情况下,它们都引用相同的狗 这适用于对象,而不是原语;对于原语,将比较值本身 Java规范 如果相等运算符的操作数都是引用 类型或空类型,则操作为对象相等。A. 如果无法转换类型,则会发生编译时错误 通过强制转换将
- 第一种情况创建两个不同的
,每个对象在内存中都有自己的引用/实体。同一类中的实例,但无论如何都是不同的对象对象
- 在第二种情况下,将相同的
引用分配给新的对象
实例:它们都引用相同的狗
对象
狗
这适用于对象
,而不是原语;对于原语,将比较值本身
Java规范
如果相等运算符的操作数都是引用
类型或空类型,则操作为对象相等。A.
如果无法转换类型,则会发生编译时错误
通过强制转换将一个操作数转换为另一个操作数的类型
(§5.5). 两个操作数的运行时值必须是
不平等
在运行时,如果操作数值都为null或都引用同一对象或数组,则==的结果为真;否则,结果是
为假。
这个问题很模糊。请提供更多细节并提出具体问题。您可能希望修改本指南:另外,在发布任何代码之前,请先介绍您的问题。您是否可以尝试用自己的话解释一下oldDog=aDog
行的作用?“内存地址”通常是在讨论JVM时引入的一个误导性概念;Java文档通常只是简单地使用“相同/相同的对象”。@chrylis谨慎的光学同意,来自c世界,这在某种程度上是误导的。我更新了答案,希望现在更干净。谢谢你的评论!
public static void main(String[] args) {
Dog aDog = new Dog()
Dog oldDog = new Dog()
if(aDog== oldDog) {
System.out.println("Same");
} else {
System.out.println("Different");
}
}
public static void main(String[] args) {
Dog aDog = new Dog();
Dog oldDog = aDog;
if(aDog== oldDog) {
System.out.println("Same");
} else {
System.out.println("Different");
}
}