首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java有像C#的ref和out关键字这样的东西吗?

Java有像C#的ref和out关键字这样的东西吗?
EN

Stack Overflow用户
提问于 2010-05-11 05:21:16
回答 4查看 124.2K关注 0票数 125

类似于以下内容:

参考示例:

代码语言:javascript
复制
void changeString(ref String str) {
    str = "def";
}

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

输出示例:

代码语言:javascript
复制
void changeString(out String str) {
    str = "def";
}

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-11 05:24:41

不,Java没有像C#的refout这样的关键字来通过引用传递。

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

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

票数 113
EN

Stack Overflow用户

发布于 2010-05-11 05:38:33

直接回答:没有

但是您可以模拟reference with wrappers

并执行以下操作:

代码语言:javascript
复制
void changeString( _<String> str ) {
    str.s("def");
}

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

输出

代码语言:javascript
复制
void setString( _<String> ref ) {
    str.s( "def" );
}
void testOut(){
    _<String> abc = _<String>();
    setString( abc );
    out.println(abc); // prints def
}

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

代码语言:javascript
复制
_<Integer> one = new <Integer>(1);
addOneTo( one );

out.println( one ); // May print 2
票数 30
EN

Stack Overflow用户

发布于 2018-08-01 20:09:54

三种未正式明确提及的解决方案:

代码语言:javascript
复制
ArrayList<String> doThings() {
  //
}

void doThings(ArrayList<String> list) {
  //
}

Pair<String, String> doThings() {
  //
}

对于配对,我推荐:https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2806545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档