`
budairenqin
  • 浏览: 201808 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 在toString()方法中修改对象状态导致诡异的debug问题

阅读更多
	protected char buffer[];
	......     
	@Override
	public String toString() {
		// Create a copy, don't share the array
		String value = new String(this.buffer, 0, count);
		if (this.buffer.length <= 1024 * 8) {
			bufferLocal.set(new SoftReference<char[]>(this.buffer));
		}

		this.buffer = null;
		return value;
	}

这段代码正常执行没什么问题,(前提是调用了toString()后就结束对此对象的使用)但是如果用IDE debug的时候监视当前对象,IDE就会调用toString(),会执行this.buffer = null,当前对象状态就悄无声息的被修改了,我被它坑的调查了半个小时,不知道有没有人曾经跟我同样遭遇,看来还是最好不要在toString修改对象状态,还是增加一个如下方法吧
	public String toStringAndClose() {
		// Create a copy, don't share the array
		String value = new String(buffer, 0, count);
		if (buffer.length <= 1024 * 8) {
			bufferLocal.set(new SoftReference<char[]>(buffer));
		}
		buffer = null;
		return value;
	}

	@Override
	public String toString() {
		// Create a copy, don't share the array
		return new String(buffer, 0, count);
	}
分享到:
评论

相关推荐

    最好的java对象ToString处理方案,ToString基类

    `ToString`方法与日志打印紧密相关,因为当需要在日志中打印对象状态时,通常会调用对象的`toString`方法。 `压缩包子文件的文件名称列表`中的`ToString.java`和`ReflectionToLogStringBuilder.java`是实现这个功能...

    js中toString方法3个作用.docx

    在 js 中,toString 方法有三个主要作用:返回一个表示对象的字符串、检测对象的类型和返回该数字对应进制的字符串。 返回一个表示对象的字符串 toString 方法的第一个作用是将对象转换为字符串形式。例如,我们...

    bean运行时跟综实例-TOSTRING

    这样,在日志中使用`logger.trace()`或`logger.debug()`方法调用`toString()`时,就能详细地显示出这些对象的具体内容,而不会在正常运行时产生额外的性能开销,因为`trace`级别的日志在性能敏感的环境中通常是关闭...

    java toString ToStringBuilder ReflectionToStringBuilder

    本篇文章将深入探讨几种在Java中实现`toString()`方法的方式,包括自定义、使用`ToStringBuilder`和`ReflectionToStringBuilder`。 首先,自定义`toString()`是最基础的方式。开发者可以根据需求手动编写代码,列出...

    Java Object toString方法原理解析

    在 Java 中,每个对象都是继承自 Object 类的,自然继承了 toString 方法。toString 方法的作用是将对象转换为字符串,以便于输出或其他操作。在使用 System.out.println() 里面输出一个对象的引用时,自动调用 ...

    浅析JAVA中toString方法的作用

    总之,`toString()`方法在Java中扮演着不可或缺的角色,它使得我们可以方便地将对象转换为可读的字符串,这对于调试、日志和用户界面的输出都非常有帮助。当创建新的类时,根据需求重写`toString()`可以提供更丰富的...

    java中的tostring方法的具体用法

    在 Java 中,每个对象都有一个 toString 方法,该方法返回对象的字符串表示形式。 toString 方法的定义 在 Java 中,toString 方法是 Object 类中定义的,该方法返回一个字符串,表示对象的类名和它的引用地址。其...

    java常用包。Date类,tostring方法视频

    java内常用包,date类,toString的使用方法

    toString完美解释

    在 Java 中,toString() 方法是一个非常重要的方法,它是 Object 类中的一个方法,所有继承自 Object 的类都会继承这个方法。toString() 方法的主要作用是将对象转换为字符串形式,以便于输出或显示。 toString() ...

    java中的 toString()方法实例代码

    Java 中的 toString() 方法是 Object 类中的一个方法,用于将对象的信息转换为字符串形式。它是 Java 中一个基本的方法,相信大家都用到过。一般来说,toString() 方法用于以字符串的形式返回对象的相关数据。 ...

    显示 toString() 方法用法的 Java 程序.docx

    在 Java 中,toString() 方法是一个内置方法,用于返回表示 StringBuilder 对象包含的数据的字符串。 toString() 方法的定义 toString() 方法是 StringBuilder 类的内置方法,用于返回表示 StringBuilder 对象包含...

    为 java文件 书写 ToString方法

    1.自动为指定包下面的所有JAVA 文件书写toString方法代码。 2.自动为指定Class模板类书写toString方法代码。 3.使用该类前最好做备份,编码格式一定要提前设置。

    面向对象实验通过编程和上机实验理解 Java 语言是如何体现面向对象

    在Java中,我们使用`new`关键字结合类的构造器来创建对象。例如,`Rectangle r1 = new Rectangle(4,40)`创建了一个新的矩形对象,并传入了初始的宽度和高度值。而`r1.setColor("red")`则调用了对象的`setColor`方法...

    浅谈Java编程ToString()方法重写的意义

    `toString()`方法是Java中`Object`类的一个成员,它默认返回对象的类名以及在内存中的哈希码,这对于开发者来说往往并不直观。因此,当我们创建一个新类并实例化对象时,如果希望在打印或输出对象时能够得到更有意义...

    重写toString和equals方法

    在 Java 中,每个对象都继承自 Object 类,而 Object 类中定义了两个重要的方法:toString() 和 equals()。这两个方法都是非常重要的,它们分别用于对象的字符串表示和对象比较。然而,在大多数情况下,我们需要重写...

    Java中构造方法set/get和toString的使用详解

    在Java编程中,构造方法、set/get方法以及toString方法是面向对象编程中常见的元素,它们在对象的创建、属性管理及对象表示方面扮演着重要角色。 首先,让我们深入理解构造方法。构造方法是一种特殊的方法,它在...

    Java 中的 Boolean toString() 方法及其示例.docx

    在 Java 编程语言中,`Boolean.toString()` 方法是一个非常重要的功能,用于将布尔值转换成对应的字符串表示。`Boolean` 类是 `java.lang` 包中的一个类,它提供了许多与布尔值相关的操作,包括将 `boolean` 值转化...

    JavaScript Object toString 初始

    在JavaScript中,`toString`方法是一个内置的方法,用于将对象转换为字符串形式。这个方法对于理解和调试代码至关重要,因为当你尝试打印或输出一个对象时,JavaScript引擎默认会调用该对象的`toString`方法。本篇...

    java tostring方法重写代码示例

    在 Java 中,所有类默认都有一个 toString() 方法,但该方法默认情况下返回的是对象的类名和哈希码,而不是对象的实际信息。例如,在上面的代码中,我们可以看到输出结果为 `[Item@8c9e3a56, Item@d780c206, Item@...

Global site tag (gtag.js) - Google Analytics