Java 有类似 C# 的 ref 和 out 关键字吗?

新手上路,请多包涵

像下面这样的东西:

参考示例:

 void changeString(ref String str) {
    str = "def";
}

void main() {
    String abc = "abc";
    changeString(ref abc);
    System.out.println(abc); //prints "def"
}

出示例:

 void changeString(out String str) {
    str = "def";
}

void main() {
    String abc;
    changeString(out abc);
    System.out.println(abc); //prints "def"
}

原文由 devoured elysium 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

不,Java 没有类似 C# 的 refout 关键字用于通过引用传递。

您只能在 Java 中按值传递。甚至引用也是按值传递的。有关更多详细信息,请参阅 Jon Skeet 关于 在 Java 中传递参数 的页面。

要执行类似于 refout 的操作,您必须将参数包装在另一个对象中并将该对象引用作为参数传递。

原文由 Mark Byers 发布,翻译遵循 CC BY-SA 3.0 许可协议

直接回答:没有

但是您可以 使用 wrappers 模拟引用

并执行以下操作:

 void changeString( _<String> str ) {
    str.s("def");
}

void testRef() {
     _<String> abc = new _<String>("abc");
     changeString( abc );
     out.println( abc ); // prints def
}

出去

void setString( _<String> ref ) {
    str.s( "def" );
}
void testOut(){
    _<String> abc = _<String>();
    setString( abc );
    out.println(abc); // prints def
}

基本上任何其他类型,例如:

 _<Integer> one = new <Integer>(1);
addOneTo( one );

out.println( one ); // May print 2

原文由 OscarRyz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题