相关疑难解决方法(0)

Java是否通过引用传递?

Java真的支持通过引用传递吗?

如果没有,为什么我们有==运算符来查找具有相同引用的两个对象?

java pass-by-reference

10
推荐指数
3
解决办法
1万
查看次数

Java如何分配指向对象而不是复制?

在课堂上,我有:

private Foo bar;
public Constructor(Foo bar)
{
    this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)

而不是从参数中提供的对象创建bar的副本,是否可以在构造函数中包含指向bar的指针,以便更改原始栏会更改此对象中的字段?

另一种方式:

int x = 7;
int y = x;
x = 9;
System.out.print(y); //Prints 7.
Run Code Online (Sandbox Code Playgroud)

可以将其设置为打印y打印9而不是7?

java reference

10
推荐指数
2
解决办法
2万
查看次数

Kotlin - 如何为外部类创建字段只读

我在Android上有以下Kotlin类:

class ThisApplication: Application() {

    lateinit var network: INetwork

    override fun onCreate() {

        super.onCreate()

        network = Network()
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,任何外部类都可以通过简单地执行以下操作来获取INetwork参考:

application.network
Run Code Online (Sandbox Code Playgroud)

但是,这也使外部类可以覆盖该值:

application.network = myNewNetworkReference
Run Code Online (Sandbox Code Playgroud)

我想避免第二种选择.不幸的是,我无法创建该字段,val因为它的初始化需要在onCreate回调中发生.

我还考虑过将字段设为私有并通过函数公开它,如下所示:

private lateinit var network: INetwork
fun getNetwork() = network
Run Code Online (Sandbox Code Playgroud)

但是,无论谁调用getNetwork()仍然可以为其分配一个新值,如下所示:

application.getNetwork() = myNewNetworkReference
Run Code Online (Sandbox Code Playgroud)

如何使网络字段成为外部类的只读?或者甚至更好,val即使我无法在构造函数中初始化它,有没有办法实现它?

field readonly kotlin kotlin-lateinit

10
推荐指数
2
解决办法
3316
查看次数

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

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

  • 布尔
  • 字节
  • 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位等等...

java overloading pass-by-reference primitive-types

9
推荐指数
3
解决办法
4万
查看次数

值为null的引用类型?

根据:http: //java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html
4.5.2引用类型
的变量引用类型可以包含null引用.

当指定的值是null?时,是否可以检索引用类型的声明类型?

具体来说,在使用反射的方法中,我希望该方法是null安全的并且对原始声明的类型起作用(虽然我知道以下代码片段不起作用),例如:

String referenceType = null;
MyReflectionClass.reflectionMethod(referenceType);
...
public static void reflectionMethod(Object referenceType) {
   Class<?> declaredType = referenceType.getClass();
}
Run Code Online (Sandbox Code Playgroud)

如果需要,我不会反对使用泛型来获取类型T而不是Object声明的参数类型.

编辑:我知道它.getClass()适用于实例,而不是声明的类型.我想知道是否可以询问引用它的声明类型.由于类层次结构是静态的,因此获取该信息应该没有问题.

编辑2:在这里,情况很清楚:Java是"通过引用传递"还是"按值传递"?
Java只是按值传递,因此即使使用了引用类型,也总是处理它,就好像传递了值(对象实例)一样(即使内部只传递了一个对象指针).这意味着Java实际上并没有一个知道它的类型的引用类型(至少就程序员而言),它都在值实例中.
因此,无法确定任何null值的类型.

java null reference-type

9
推荐指数
2
解决办法
1万
查看次数

不变和传递价值

我有以下代码,它有
一个可变的Person类,String和一个修改String和Person实例的方法

    class Person{

int a = 8;

public int getA() {
    return a;
}

public void setA(int a) {
    this.a = a;
}

@Override
public String toString() {
    return "Person [a=" + a + "]";
}

  }
Run Code Online (Sandbox Code Playgroud)

-

public class TestMutable {
public static void main(String[] args)
{
    Person p = new Person();
    p.setA(34);


    String s = "bar";

             modifyObject(s, p);   //Call to modify objects

    System.out.println(s);
    System.out.println(p);

}



private static void modifyObject(String str, Person p)
{

        str = "foo";
        p.setA(45); …
Run Code Online (Sandbox Code Playgroud)

java terminology parameter-passing pass-by-reference pass-by-value

9
推荐指数
1
解决办法
3048
查看次数

Java for循环值或引用

我在我的代码中发现了一个问题.首先是代码:

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String[] blablubb = { "a", "b", "c" };

        for(String s : blablubb) {
            s = "over";
        }
        printArray(blablubb);


        for (int i = 0; i < blablubb.length; i++) {
            blablubb[i] = "over";
        }
        printArray(blablubb);

    }

    public static void printArray(String[] arr) {
        for( String s : arr ) {
            System.out.println(s);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

输出是:

a
b
c
over
over
over
Run Code Online (Sandbox Code Playgroud)

我假设第一个循环也会覆盖数组中的String.所以输出在任何情况下都会结束.它似乎创建了值的副本而不是创建引用.我从未察觉过这一点.我做错了吗?是否有选项来创建引用?

//编辑:除了我之外,似乎每个人都知道这一点.我来自C背景,并没有足够重视与C非常不同的术语参考.幸运的是,我花了10分钟来计算出来(这一次).

java for-loop reference

9
推荐指数
2
解决办法
7007
查看次数

ArrayList实际存储了什么 - 引用对象或实际对象?

假设我的代码是这样的:

ArrayList list = new ArrayList();
Student s = new Student();    // creating object of Student class

myList.add(s);      // Here am confused ...

/* myList contains just the reference variable to the Student object, OR

   myList contains the actual Student object (memory allocation for name, rollNo etc)  ??   
*/
Run Code Online (Sandbox Code Playgroud)

在使用add()向ArrayList添加对象时:

ArrayList是"对象引用"列表或"实际对象"列表???

java arraylist

9
推荐指数
2
解决办法
1万
查看次数

Java Pass By Value和Pass By Reference

我已经做了以下示例来检查我的知识

import java.util.Map;

public class HashMap {
    public static Map<String, String> useDifferentMap(Map<String, String> valueMap) {
        valueMap.put("lastName", "yyyy");
        return valueMap;
    }

    public static void main(String[] args) {
        Map<String, String> inputMap = new java.util.HashMap<String, String>();
        inputMap.put("firstName", "xxxx");
        inputMap.put("initial", "S");
        System.out.println("inputMap : 1 " + inputMap);
        System.out.println("changeMe : " + useDifferentMap(inputMap));
        System.out.println("inputMap : 2 " + inputMap);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

original Map : 1 {initial=S, firstName=xxxx}
useDifferentMap : {lastName=yyyy, initial=S, firstName=xxxx}
original Map : 2 {lastName=yyyy, initial=S, firstName=xxxx}
Run Code Online (Sandbox Code Playgroud)

此方法useDifferentMap获取地图并更改值并返回相同的值.修改后的地图将包含修改后的值,其范围为useDifferentMap方法的本地范围. …

java hashmap pass-by-reference pass-by-value

9
推荐指数
2
解决办法
3万
查看次数

为什么Java仅按值传递?

所以这是另一个有价值的downvote问题.

我知道Java IS是按价值传递的,这意味着什么以及它是如何工作的.所以这不是另一个你可以解释什么是价值传递.我更为好奇的是,为什么Java不包括通过引用传递?我想这会有用吗?知道如何巩固我头脑中的推理也是有帮助的....

我讨厌'这是因为'场景肯定相当于'因为我这么说'.那么有没有人能够回答为什么Java只包含值传递?

java pass-by-value

9
推荐指数
1
解决办法
251
查看次数