我可以通过Java中的引用传递原始类型吗?

Hri*_*sto 9 java overloading pass-by-reference primitive-types

我想调用一个可能采用不同版本的方法,即类型为输入参数的相同方法:

  • 布尔
  • 字节
  • INT

我想这样做的方法是"重载"方法(我认为这是正确的术语?):

public void getValue(byte theByte) {...}
public void getValue(short theShort) {...}
... etc ...
Run Code Online (Sandbox Code Playgroud)

...但这意味着我必须通过引用传递原始类型...类似于C++,其中方法具有外部效果,其中它可以修改其范围之外的变量.

有没有办法在不创建新类或使用原始类型的Object版本的情况下执行此操作?如果没有,有关替代战略的任何建议吗?

让我知道是否应该进一步解释清除任何混淆.


UPDATE

我实际上要做的是从一组位构造基本类型.因此,如果我正在处理方法的字节版本,我希望我的工作能够得到8位并返回字节(因为我无法通过引用传递).

我问这个问题的原因是因为我用bit做的工作是非常重复的,我不想在不同的方法中使用相同的代码.所以我想找到一种方法让我的ONE方法知道我正在谈论多少位......如果我正在处理一个字节,那么就是8位,如果我正在处理一个短的16位等等...

Pab*_*ruz 9

Java 始终是按值传递的.Java中没有pass-by-reference.它是在规格中写的!

  • 迂腐,它是通过参考价值.您获得相同的对象(对于非基元)但您无法更改自己范围之外的实际引用. (9认同)
  • 哪位程序员会读规范而不是那么做?向SO提出此类问题的答案要比通过规范更快。如果程序员宁愿通过规范来解决这样的问题,那么该程序员效率就非常低下。 (2认同)

mer*_*ike 9

虽然Java支持重载,但所有参数都是按值传递的,即调用者看不到赋值方法参数.

在您的代码段中,您尝试返回不同类型的值.由于返回类型不是方法签名的一部分,因此不能使用不同的返回类型进行重载.因此,通常的做法是:

int getIntValue() { ... }
byte getByteValue() { ... }
Run Code Online (Sandbox Code Playgroud)

如果这实际上是转换,则标准命名为

int toInt() { ...}
byte toByte() { ... }
Run Code Online (Sandbox Code Playgroud)

  • +1 是的,打败了我。看起来OP的目标是避免这种情况,因为它是一种完全常见且合法的模式。 (2认同)

Dar*_*rov 5

你不能.在Java中,参数始终按值传递.如果参数是引用类型,则引用按值传递,您可以在方法内修改它,而使用基本类型则不可能.

您需要创建一个包装器类型.