相关疑难解决方法(0)

如何通过引用正确传递Integer类?

我希望有人可以为我澄清这里发生的事情.我在整数类中挖了一下但因为整数覆盖+运算符我无法弄清楚出了什么问题.我的问题在于这一行:

Integer i = 0;
i = i + 1;  // ? I think that this is somehow creating a new object!
Run Code Online (Sandbox Code Playgroud)

这是我的推理:我知道java是通过值传递(或通过引用值传递),所以我认为在下面的示例中,每次都应该递增整数对象.

public class PassByReference {

    public static Integer inc(Integer i) {
        i = i+1;    // I think that this must be **sneakally** creating a new integer...  
        System.out.println("Inc: "+i);
        return i;
    }

    public static void main(String[] args) {
        Integer integer = new Integer(0);
        for (int i =0; i<10; i++){
            inc(integer);
            System.out.println("main: "+integer);
        } …
Run Code Online (Sandbox Code Playgroud)

java integer pass-by-reference

55
推荐指数
6
解决办法
9万
查看次数

通过引用或通过值传递?

在学习新的编程语言时,您可能遇到的一个可能的障碍是,默认情况下,该语言是按值传递还是按引用传递.

所以这是我对你们所有人的问题,用你最喜欢的语言,它是如何实际完成的?什么是可能的陷阱

当然,你最喜欢的语言可以是你曾经玩过的任何东西:流行的,模糊的,深奥的,新的,旧的 ......

language-agnostic oop parameters pass-by-reference pass-by-value

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

在Java中,什么是浅拷贝?

java.util.Calendar.clone()返回"...具有相同属性的新日历"并返回"此日历的浅表副本".

为回答这并不似乎是一个浅拷贝这里的SO.这个问题被标记为与语言无关, Java似乎不遵循语言无关的定义.当我单步执行代码时,我注意到结构和元素被复制到这个新对象,而不仅仅是语言无关的结构.

在Java中,什么是浅拷贝?

它与Java深层副本(如果存在)有何不同?

java clone shallow-copy

51
推荐指数
3
解决办法
8万
查看次数

Java永远不会通过引用传递,对吗?......对吗?

可能重复:
Java是"传递引用"吗?

我今天发现了一种不寻常的Java方法:

private void addShortenedName(ArrayList<String> voiceSetList, String vsName)
{
     if (null == vsName)
       vsName = "";
     else
       vsName = vsName.trim();
     String shortenedVoiceSetName = vsName.substring(0, Math.min(8, vsName.length()));
     //SCR10638 - Prevent export of empty rows.
     if (shortenedVoiceSetName.length() > 0)
     {
       if (!voiceSetList.contains("#" + shortenedVoiceSetName))
         voiceSetList.add("#" + shortenedVoiceSetName);
     }
}
Run Code Online (Sandbox Code Playgroud)

根据我读过的有关Java传递变量,复杂对象的行为的一切,这段代码应该什么都不做.所以嗯......我在这里错过了一些东西吗?是否有一些微妙的东西丢失在我身上,或者这些代码是否属于thedailywtf?

java pass-by-reference pass-by-value

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

Java中的对象引用有多大,它究竟包含哪些信息?

作为一个程序员,我认为这些是寻找像"java.lang.Object中的地址1a234552"或类似的相似s

Object s = "hello";
Run Code Online (Sandbox Code Playgroud)

它是否正确?因此所有引用都是固定大小的?

java

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

Java Object Cast如何在场景后工作?

可能重复:
Java强制转换操作符如何工作?
Java强制实现

我总是想知道如何使用Java进行对象转换.我理解原始类型它会更像二进制表示级别,但是对象呢?有点像Polymorphism或者dynamic binding在某种程度上会在运行时确定一切吗?例如:

class Parent{
     void A(){}
}
class Child extends Parent{
     @Override
     void A(){}
}

Parent p = new Parent();
Child c = (Child) p;
Run Code Online (Sandbox Code Playgroud)

这是如何在幕后工作的?它是否创建了一个新实例Child?而且,如果你试图施放会发生什么:

Child b = (Child) new Object();
Run Code Online (Sandbox Code Playgroud)

最后一个,在将一个原语转换为包装类时:

Double d = (Double) 3.3;
Run Code Online (Sandbox Code Playgroud)

我知道你没有必要施展它,但如果你这样做呢?在后端发生了什么重大事件?

java polymorphism casting

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

Kotlin是"按值传递"还是"按参考传递"?

据我所知,Java是这篇文章的传值.我来自Java背景我想知道Kotlin用于传递两者之间的值.像在扩展方法等.

kotlin

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

java:尝试finally块执行

return;try块中存在try-finally执行时,我感到困惑.根据我的理解,finally块将始终执行,即在返回调用方法之前.在考虑以下简单代码时:

public class TryCatchTest {
    public static void main(String[] args){
        System.out.println(test());
    }
    static int test(){
        int x = 1;
        try{
            return x;
        }
        finally{
            x = x + 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

打印的结果实际上是1.这是否表示finally块未执行?任何人都可以帮助我吗?

java finally try-catch

31
推荐指数
2
解决办法
2624
查看次数

Java:为什么这种交换方法不起作用?

我有以下代码:

public class Main {

    static void swap (Integer x, Integer y) {
        Integer t = x;
        x = y;
        y = t;
    }

    public static void main(String[] args) {
       Integer a = 1;
       Integer b = 2;
       swap(a, b);
       System.out.println("a=" + a + " b=" + b);
    } 
}
Run Code Online (Sandbox Code Playgroud)

我希望它打印a = 2 b = 1,但它打印相反.显然交换方法不会交换a和b值.为什么?

java

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

Java通过引用传递

这2个代码有什么区别:

代码A:

Foo myFoo;
myFoo = createfoo();
Run Code Online (Sandbox Code Playgroud)

哪里

public Foo createFoo()
{
   Foo foo = new Foo();
   return foo;
}
Run Code Online (Sandbox Code Playgroud)

比.代码B:

Foo myFoo;
createFoo(myFoo);

public void createFoo(Foo foo)
{
   Foo f = new Foo();
   foo = f;
}
Run Code Online (Sandbox Code Playgroud)

这2个代码之间有什么区别吗?

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

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