我是新来的Java,正在阅读Oracle教程。每一节后面都有问题和答案,一个答案里面有一句我听不懂(见下面粗线)。
来源是https://docs.oracle.com/javase/tutorial/java/javaOO/QandE/objects-answers.html
我指的是问题2,见粗体字。据我所知,如果没有对数组的引用,那么数组有资格进行垃圾收集。是否存在对此数组持有的对象的引用并不重要,因为内部对象(在数组中)有自己的引用计数。是这样吗?请解释一下粗体的句子。
引用自oracle教程:https://docs.oracle.com/javase/tutorial/java/javaOO/QandE/objects-answers.html
问题:下面的代码创建一个数组和一个字符串对象。代码执行后存在多少对这些对象的引用?任一对象是否符合垃圾回收机制?
String[] students = new String[10];
String studentName = "Peter Smith";
students[0] = studentName;
studentName = null;
答:有一个对students数组的引用,该数组有一个对字符串Peter Smith的引用。两个对象都不符合垃圾收集的条件。数组student不符合垃圾收集的条件,因为它有一个对对象studentName的引用,即使该对象已被赋值为null。对象studentName
也不合格,因为students[0]
仍引用该对象。
这一切都与字符串是不可变的有关,这意味着一旦创建,它们就不能更改。所以当你这么做的时候,
String studentName = "Peter Smith";
然后你这样做,
studentName = null,
学生名称现在指向另一个指向null的内存地址。“彼得·史密斯”还在记忆的某个地方。
在将值"Peter Smith"分配给学生[0]后,即使将学生名称设置为null,学生[0]仍然保留该值。因为学生[0]在记忆中持有一个持有“彼得·史密斯”的地方。
两个对象都不符合垃圾收集的条件。
是的。
但解释并不清楚:
数组
学生没有资格进行垃圾收集,因为它有一个对对象studentName
的引用,即使该对象已被分配值null
。
此外,数组中的null
元素不会影响数组的GC资格,但只会影响数组元素的GC资格。
例如:
String[] students = new String[10];
// the object referenced by students is not eligible to be GC
或:
String[] students = new String[10];
String studentName = "Peter Smith";
students[0] = studentName;
students[0] = null;
// no object is eligible to be GC
正确的句子可以是:
String
对象不符合垃圾回收机制,因为以前由学生名称
变量引用的对象仍然由数组引用,并将新对象分配给变量(如分配学生名称
到null
)仅更改此变量的引用,而不更改引用相同对象的变量的引用。
请注意,数组不会改变任何Java对象分配的方式。
使用List
,您可以注意到相同的行为。
例如:
String a = "Peter";
List<String> list = ...
list.add(a);
a = null;
由于同样的原因,没有对象有资格成为GC。
数组student不符合垃圾收集的条件,因为它有一个对对象studentName的引用,即使该对象已被赋值为null。
是的,那句话是。。。古怪的这毫无意义。
数组可以进行垃圾收集,无论它对其他对象有什么引用。
学生是对数组的引用,因此只要学生仍在范围内,它就不符合垃圾回收机制的条件。
我是Java新手,从OracleJava教程学习Java。我现在正在学习嵌套类、静态类和内部类。我发现下面的解释似乎很奇怪,我认为这是错误的。 来自:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html 嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其
问题内容: 我没有收到来自服务器的JSON类型数据作为响应。 我正在使用JSON插件。 如果我没有得到任何回应,但是如果我没有提及任何响应,那么我正在获取页面的HTML格式。 struts.xml: JSP页面: 控制台错误: org.apache.struts2.dispatcher.Dispatcher- 无法找到动作或结果没有为动作action.Part和结果定义结果。{和“ col1”:“
主试者可能会问你一些与申请职位完全无关的问题,目的在进一步了解你的思考能力及见识,不要表现出不耐烦或惊讶,以免给雇主一个太计较的印象。以下是出国留学网小编为大家整理的面试的时候回答问题的技巧,欢迎大家阅读,更多精彩内容请关注出国留学网. 诚实有礼 态度诚恳,不宜过分客套和谦卑。 不太明白主试者的问题时,应礼貌地请他重复。 陈述自己的长处时,要诚实而不夸张,视乎申请职位的要求,充份表现自己有关的能力
问题内容: 我没有从服务器获得JSON类型数据的响应。 我正在使用JSON插件。 如果我没有得到任何回应,但是如果我没有任何回应,那么我正在获取页面的HTML格式。 控制台错误: -找不到动作或结果没有为动作action.Part和结果定义结果。 我没有获得有关jQuery成功的数据。请纠正我,这是怎么了? 问题答案: 使用A 来指定在执行操作和结果时从回调函数返回的数据类型,以及从服务器返回的响
几天以来,我在运行Struts网络应用程序时遇到了一些问题。我尝试了StackOverflow中与我的问题相关的几个解决方案,但都不起作用。 网状物xml: struts。xml: 登录。jsp: 登录。爪哇: 我补充说: commons-logging-1.1.3。罐子 freemarker-2.3.19。罐子 ognl-3.0.6。罐子 struts2-core-2.3.15.1。罐子 xwo
我可以通过本地J控制台访问Mbean,但无法从远程主机访问MBEANS。 我的配置: 远程进程:服务:jmx:远程处理-jmx://10.32.222.111:4447 我将用户添加到管理和应用领域 测试=2b1be81e1da41d4ea647bd82fc8c2bc9 但当我尝试连接它说:连接失败:重试 当我使用远程进程为:10.32.222.111:4447在服务器上提示警告: 16: 29: