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

在Java和.NET中使用ToString()的最初原因是什么?

左翰海
2023-03-14
问题内容

已经使用ToString()在过去适度我发现它是非常有用的
许多情况。但是,我对这种方法的使用几乎没有理由
将这种方法放在之外System.Object。我的大胆猜测是,
在进行
有关.NET框架初始设计的工作和召开的会议中的某个时刻,决定有必要-
或至少非常有用-包括一种ToString()
.NET框架中的所有内容都可以实现。

有谁知道确切的原因是什么?我是否错过了很多情况
,ToString()足以证明自己是其中的一部分System.Object?什么
是原始的原因ToString()

非常感谢!

PS-再说一次:我不是在质疑这个方法,也不是暗示它没有用,
我只是很好奇知道是什么使它如此有用以至于可以放入
System.Object。

旁注-想象一下:

AnyDotNetNativeClass someInitialObject = new AnyDotNetNativeClass([some constructor parameters]);

AnyDotNetNativeClass initialObjectFullCopy = AnyDotNetNativeClass.FromString(someInitialObject.ToString());

这不是很酷吗?

编辑(1):

(A)-根据一些答案,.NET语言似乎是从
Java 继承过来的。因此,我将“ Java”添加到主题和标签中。如果有人
知道为什么要用Java实现的原因,请说明一下

(B)-静态假设FromString与序列化:可以,但这是
一个完全不同的故事,对吧?


问题答案:

它最初是为了调试和记录目的而添加到Object的。
如果查看JavaDoc for Object.toString
(http://java.sun.com/javase/6/docs/api/java/lang/Object.html#toString()),
则可以推断出这一点,因为它会输出类名,后跟@,后跟
对象哈希码的无符号十六进制表示形式。我唯一看到
它非常有用的地方是在日志或控制台中。

但是Java创建者有意地将此方法保留为非最终方法,因此子类
可以(并且应该)重写它,以代替输出更多子类特定的
信息。他们可能已经实现了JVM,以便将一个
对象传递到任何需要字符串的方法中,它将在
上面生成该哈希值并将其传递到该方法中,但是相反,他们很好,并将其
实现为一种方法,您可以如此方便地进行操作。覆盖。

它是在对象级别实现的,因此您可以放心地假设 可以将任何
对象写到日志/控制台中。这是
Java语言中的一个方便假设。



 类似资料:
  • 在哪些情况下,应该使用? 是否只是为了合法性问题? 如果是,那么问题是什么? 因为我仍然使用开发我的所有项目

  • 问题内容: 我见过很多人声称您应该在选择查询中专门为想要的每一列命名。 假设我仍然要使用所有列,为什么我不使用? 即使考虑问题* SQL查询-从视图选择或从视图*选择col1,col2,’colN,我也不认为这是完全相同的副本,因为我正从略有不同的观点着手解决这个问题。 我们的原则之一是在优化之前就不进行优化。考虑到这一点,在被证明是资源问题或架构几乎是固定的之前,似乎应该使用 首选的 方法。众所

  • 问题内容: 第一次阅读时我听说标记: http://slf4j.org/faq.html 我检查 Logger 对象的可用方法: http://www.slf4j.org/api/org/slf4j/Logger.html http://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Logger.ht

  • 问题内容: 当我尝试运行程序时,出现以下错误 请帮忙 问题答案: 从Javadoc: 如果Java虚拟机找不到声明为native的方法的适当本机语言定义,则抛出该异常。 这是与JNI相关的错误。loadJacobLibrary试图加载名为jacob-1.14.3-x86的本机库,但在java.library.path定义的路径上找不到该库。启动JVM时,应将此路径定义为系统属性。例如 在Windo

  • 在这里抛出RejectedExecutionException是否有其他原因? java.util.concurrent.RejectedExecutionException:任务java.util.concurrent.FutureTask@4194a5f0被java.util.concurrent.ThreadPoolExecutor@41a36e90拒绝[终止,池大小=0,活动线程=0,排队

  • 问题内容: C#和Java都定义 易失性读取具有获取语义 易失性写入具有释放语义 我的问题是: 这是定义volatile的唯一正确方法。 如果没有,如果语义相反,情况会完全不同,即 易失性读取具有释放语义 易失性写入具有语义 问题答案: 获取/释放语义的作用并不在于其他线程多久才能看到volatile字段本身的新写入的值,而在于易失性操作在不同线程之间建立事前联系的方式。如果线程A读取了一个vol