【问题标题】:Which data types in java share state?java中哪些数据类型共享状态?
【发布时间】:2014-04-01 12:05:55
【问题描述】:

我正在查看java 中的原始数据类型。它提到原始值不与其他原始值共享状态。

这对我来说很有意义,但我想知道是否有人可以给我一个示例,其中数据值实际上与 java 中的其他数据值共享状态。我可以想出一个包含静态变量的自定义类。

自然,该类的实例将共享这些静态变量,从而共享某种状态。但我正在寻找专门展示 JAVA 提供的非原始数据类型中的状态共享的示例。

【问题讨论】:

  • 有无数种可能的例子。

标签: java primitive-types state-saving


【解决方案1】:

我认为这里的sharing state 意味着非原始变量始终是对内存中对象的引用。这些对象在这些变量之间“共享”。

即您可以使用非原始类型:

    StringBuilder sb1 = new StringBuilder();
    StringBuilder sb2 = sb1;

    sb1.append("change thru sb1");
    sb2.append(" change thru sb2");

    // will print both modifications, since sb1 & sb2 refer to the same object
    System.out.println(sb1); 

而基元则不能这样,因为它们总是维护自己的数据副本。

【讨论】:

  • 我认为这意味着两个 不同的 对象共享某种状态并且不指向相同的内存位置。
  • 我很确定你想多了。首先,类和对象在您引用的教程中稍后解释。而不同对象之间的数据共享只能通过某种形式的static 全局数据来完成,所以这里也没有太多可讨论的。
【解决方案2】:

java中的原始数据类型不保留对其他对象的引用,例如:

int a = 0;
int b = 1;

b = 2;
//a value is still 0;

Java 中的对象变量是指向对象的指针,因此您可以共享两个变量的状态,让它们引用同一个对象:

Object a = new Object();
Object b = a;

b.modifySomething();
// a is modified too because they are the same object

【讨论】:

    【解决方案3】:

    我建议你阅读这个帖子。

    我描述了java中数据传递的“问题”。

    Is Java "pass-by-reference" or "pass-by-value"?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      相关资源
      最近更新 更多