当前位置: 首页 > 面试题库 >

Java对象分配

东方华荣
2023-03-14
问题内容

我是Java的新手,因此我对对象分配有一些疑问。例如,

Test t1 = new Test();
Test t2 = t1;
t1.i=1;

假设变量i的测试类中定义的,我说得对假设T1和T2点到修改同一个对象t1.i=1会影响t1t2?其实我测试了一下,似乎我是对的。但是,当我尝试相同的操作时String,修改仅发生在不影响另一侧的一侧。这是什么原因呢?

编辑:我尝试使用String的情况。

String s1 = "0";
String s2 = s1;          
s1 = "1";
System.out.println(s1);
System.out.println(s2);

我通过测试String的大小写来意识到我的错误,因为它是不可变的。我认为s1="1"修改字符串的情况实际上是将对“
1”的引用返回给s1。不过,我的问题仍然存在。是否Test t2 = t1;会导致t2和t1都指向同一个对象,或者现在都具有自己的对象?这种情况是否适用于Java上的所有对象?


问题答案:

您是对的,但字符串是特例;它们是不可变的,在这种情况下,它们像原始对象一样工作。

@newacct

我引用http://docs.oracle.com/javase/tutorial/java/data/strings.html:

注意:String类是不可变的,因此一旦创建它,​​就不能更改String对象。String类具有许多方法,下面将讨论其中的一些方法,这些方法似乎可以修改字符串。由于字符串是不可变的,因此这些方法的真正作用是创建并返回一个包含操作结果的新字符串。

这就是使字符串成为特例的原因。如果您不知道这些,您可能希望引号中讨论的方法不会返回新的字符串,这将导致意外的结果。

@ user1238193

考虑以下问题:“是否测试t2 = t1;导致t2和t1都指向同一个对象,或者现在都具有自己的对象?这种情况是否适用于Java上的所有对象?”

t1和t2将指向同一对象。对于任何Java对象(包括不可变对象)都是如此



 类似资料:
  • 问题内容: 我有类似以下内容: 例如100的集合,其中stackid可以使用不同的questionId复制。stackId和questionId之间的一对多关系 是否有一种 流式的 Java 8方式可以转换为以下结构: 这将是25个的集合,每个实例具有4个QuestionId的嵌套集合。 输入: 输出量 问题答案: Stream API的直接方法涉及2条Stream管道: 第一个创建一个临时的到。

  • 问题内容: 我试图通过在会话中设置项目列表来将它们发送到JSP。我在这里使用Spring控制器。 会话对象包含所有三个项目。 问题: 预期: 会话对象应包含3个项目。 实际: 会话中只有2个项目可用,因为删除了第三个项目更新了会话对象。但是我从未将更新的l对象添加到会话中。为什么Java在返回页面之前重新分配会话对象?因此,我是否需要将l复制到另一个列表并使用它? 问题答案: 您必须首先了解Jav

  • 假设我有一个变量,我想设置一些默认值。 这两种选择的好处/缺点是什么? 使用对象传播 或者用Object.assign 这就是让我好奇的promise。

  • 我正在尝试拆分ArrayList中的每个对象,因为很多行都包含逗号(“,”)。每个对象都包含一个项和值(但并非所有对象都包含值): 这是我的一段代码: “CE”是主要的ArrayList 我的一段代码只使用逗号将其拆分为同一个ArrayList,另一个问题是如何查看没有“值”的对象并将空值添加到ArrayList。 谢谢各位。

  • 根据这个答案,https://stackoverflow.com/a/12020435/562222,将一个对象分配给另一个对象只是复制引用,但让我们看看以下代码段: 运行它可以提供:

  • 本文向大家介绍java对象转型实例分析,包括了java对象转型实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java对象转型的概念,分享给大家供大家参考。具体方法如下: 对象转型(casting)注意事项如下: 1、一个基类的引用类型变量可以“指向”其子类的对象。 2、一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。 3、可以使用 引用变量 instanceof 类