相关疑难解决方法(0)

Java noob的缺陷是什么?

我在SO上经历了一些Java问题.我必须说这里的内容写得非常好,SO上的Java人员可以真正抽出答案.

但我总是找到Java人的Java答案.这本身就很棒,但我是一个Java菜鸟.所以我并不关心"类型参数方差联合联合"的运作方式.它可能很方便,但现在......它不是.

Java for a noob(来自PHP和Python)什么是cheatcodes?

如果你可以链接到一个SO答案(可能在那里但我找不到)或者写出Java与其他语言不同的东西是什么?(在基础水平上)

有些人可能称之为Java Gotchas(虽然我找不到官方的)

java

23
推荐指数
16
解决办法
3515
查看次数

List对象是否通过引用传递?

可能重复:
Java是否通过引用传递?

List对象是否通过引用传递?换句话说,如果我将一个ArrayList (java.util.ArrayList)对象传递给一个类,它会在我更改它时自动更新吗?

java list

22
推荐指数
3
解决办法
5万
查看次数

为什么java中不允许赋值为'this'?

我从编译器得到的错误是"赋值的左侧必须是变量".我的用例是深度复制,但并不真正相关.

在C++中,可以分配给*this.

问题不在于如何规避任务this.这很简单,但是决定不做this变量的背后有什么理由.

原因是技术性的还是概念性的?

我的猜测到目前为止 - 在随机方法中重建Object的可能性容易出错(概念性),但技术上可行.

编辑请限制"因为Java规范如此说"的变化.我想知道决定原因

java reference this variable-assignment

20
推荐指数
3
解决办法
9805
查看次数

如何在Java中交换两个字符串变量而不使用第三个变量

如何在不使用第三个变量(即temp变量)的情况下在Java中交换两个字符串变量?

String a = "one"
String b = "two"
String temp = null;
temp = a;
a = b;
b = temp;
Run Code Online (Sandbox Code Playgroud)

但这里有第三个变量.我们需要消除第三个变量的使用.

java string swap

19
推荐指数
4
解决办法
6万
查看次数

面试问题:符合垃圾收集条件的对象

提供以下代码:

class A {
    Boolean b;
    A easyMethod(A a){
        a = null;
        return a;
    }
    public static void main(String [] args){
        A a1 = new A();
        A a2 = new A();
        A a3 = new A();
        a3 = a1.easyMethod(a2);
        a1 = null;
        // Some other code 
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是之前有多少对象符合垃圾收集的条件// Some other code.

然后正确答案是(至少那是面试官的答案):2 - 布尔值,b因为它是一个包装器和a1.

你能帮我解释一下为什么a2a3不是垃圾收集?

后期编辑:

  • 好的,我想我现在明白了.起初有点混乱,但现在我确信面试官是错的.我最初的错误是,起初我并不认为Java只是通过值传递,因此不可能从以"a2"作为参数的函数内部生成a2 null,因为a2实际上是a2的副本.
  • 布尔b的部分确实非常明显.

谢谢你的回答,我会在那之后发一些面试反馈:).

java garbage-collection

18
推荐指数
5
解决办法
8165
查看次数

Java是否区分值类型和引用类型

C#区分了这两者.java是做同样的还是不同的?

c# java value-type reference-type

18
推荐指数
1
解决办法
6544
查看次数

困惑,java是否在传递对象引用时使用按值调用或按引用调用?

public class program1{

    public static void main(String args[]){

        java.util.Vector vc=new java.util.Vector();

        vc.add("111");
        vc.add("222");

        functioncall(vc);

        vc.add("333");

        System.out.println(vc);

    }

    public static void functioncall(java.util.Vector vc){     

        vc=null;    

    }
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出为[111,222,333].但是,当我运行以下程序时,输出为[333].当我们传递引用时会感到困惑,无论是按值调用还是按引用调用,它是如何工作的?为什么

public class program1{

    public static void main(String args[]){

        java.util.Vector vc=new java.util.Vector();

        vc.add("111");
        vc.add("222");

        functioncall(vc);

        vc.add("333");

        System.out.println(vc);

    }

    public static void functioncall(java.util.Vector vc){

        vc.removeAllElements();  

    }
}
Run Code Online (Sandbox Code Playgroud)

java pass-by-reference pass-by-value

17
推荐指数
1
解决办法
5万
查看次数

Java中String方法的函数指针

我不了解lambda的一些事情.

String s = "Hello World";       
Function<Integer, String> f = s::substring;
s = null;
System.out.println(f.apply(5));
Run Code Online (Sandbox Code Playgroud)

为什么该f.apply方法仍然有效s = null.毕竟,StringGC应该删除该对象,因为没有指向该对象的指针.

还有一件事,为什么我不需要这里的退货声明?

Function<Integer, String> f = t -> t + "";
Run Code Online (Sandbox Code Playgroud)

java lambda

17
推荐指数
3
解决办法
753
查看次数

Java是通过引用还是按值返回

我有一个HashMap:

private HashMap<String, Integer> cardNumberAndCode_ = new HashMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)

后来我这样做:

Integer balance = cardNumberBalance_.get(cardNumber);
System.out.println(balance);
balance = 10;
Integer newBalance = cardNumberBalance_.get(cardNumber);
System.out.println(newBalance);
Run Code Online (Sandbox Code Playgroud)

首先它打印1000,第二次打印1000,值不变.为什么java按值而不是通过引用返回Integer?

java reference hashmap

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

"通过引用传递"究竟是什么意思?

谁有权决定?

编辑:显然我没有成功地完善我的问题.
不是在问Java的论证是如何传递的.我知道看起来像持有对象的变量实际上是一个包含对象引用的变量,并且该引用是按值传递的.这里有很多很好的解释(在链接的线程和其他线程中)和其他地方.

问题是关于术语传递的技术含义.(结束编辑)

我不确定这是否是SO的正确问题,如果没有道歉,但我不知道更好的地方.在这里的其他问题中已经说了很多,例如Java是"传递参考"还是"传递价值"?通过引用或通过值传递?,但我没有找到该术语含义的权威答案.

我认为"通过引用传递"意味着"将引用(通常是指针)传递给对象",因此被调用者可以修改调用者看到的对象,而"按值传递"意味着复制对象,并让被调用者玩得开心(显而易见的问题:如果对象包含引用,深层复制或浅层).
唱FW变成了很多 地方 说: "按引用传递"的意思只是说,这里有一些说法,这意味着更多的,但仍然定义读

一种ParameterPassing模式,其中将实际参数的引用(或者如果你想在政治上不正确,指针)传递给形式参数; 当被调用者需要形式参数时,它取消引用指针以获取它.

我没有发现许多地方给出了更强的术语定义,在这个页面上,我发现"形式参数的左值设置为实际参数的左值".并且,如果我理解正确,这里使用相同的定义("形式参数仅作为实际参数的别名.")

事实上,我发现使用更强定义的唯一地方是反对这样一种观点,即在Java中,对象是通过引用传递的(这可能是由于我缺乏google-fu).

所以,如果我把事情弄清楚,那就是通过参考传递

class Thing { ... }
void byReference(Thing object){ ... }
Thing something;
byReference(something);
Run Code Online (Sandbox Code Playgroud)

根据第一个定义大致对应(在C中)

struct RawThing { ... };
typedef RawThing *Thing;
void byReference(Thing object){
    // do something
}
// ...
struct RawThing whatever = blah();
Thing something = &whatever;
byReference(something); // pass whatever by reference …
Run Code Online (Sandbox Code Playgroud)

java parameters terminology pass-by-reference

15
推荐指数
3
解决办法
7793
查看次数