代码之家  ›  专栏  ›  技术社区  ›  Chris S

面向C程序员的高级Java主题

  •  4
  • Chris S  · 技术社区  · 14 年前

    • 方法中的参数是否以与C#相同的方式传递?(复制用于引用类型)
    • 如果正在使用的某个库缺少依赖项,如何编译应用程序?
    • 我是否需要担心使用+=进行大字符串连接(例如,改用StringBuilder)
    • Java有操作符重载吗:我应该使用吗 equals() 或==默认值。基本上是object.equals对象与C#(值类型的反射,引用类型的地址引用)大致相同
    3 回复  |  直到 14 年前
        1
  •  10
  •   Jon Skeet    14 年前

    • 是的,在Java中,参数总是按值传递的。包括引用,它们是复制的(而不是 物体 正在复制)。注意,Java没有任何等价的 ref out
    • @Override允许您在编译时捕获拼写错误,就像C中的“Override”修饰符一样#
    • 您只能根据正在使用的库编译应用程序。没有可传递的依赖项检查,就像.NET中没有一样。
    • 是的,应该避免在循环中串联字符串,就像在.NET中一样。不过,单语句串联是可以的,就像在.NET中一样—而且,编译器将在编译时执行常量表达式的串联,并且字符串文本将被插入。
    • Object 引用和一个原始值,自动装箱/取消装箱涉及其中,我永远记不清这是哪种方式。不过,这是个坏主意
        2
  •  4
  •   Thirler    14 年前

    和C#一样?(复制用于 参考类型)

    所有的灵长类类型都被复制,所有的对象实际上都是指向对象的指针,指针被复制,但实际的对象没有被复制。

    为什么有@Override属性 突然出现了(我想是Java 1.5+?)

    它没有,因为Java1.6还可以用它来显示一个方法正在实现一个接口。@Override允许你向编译器指出你认为你正在重写一个方法,编译器会在你没有重写的时候警告你(这实际上非常有用,特别是当超类发生变化时)

    应用程序,如果您缺少 其中一个库的依赖关系 你在用什么?

    我不这么认为。

    大字符串串联(例如,使用

    在某些情况下。java编译器+VM非常擅长为您自动使用StringBuilder。然而,它不会总是这样做。我不会事先对此(或任何事情)进行优化。

    我应该使用equals()还是==by 违约。基本上是object.equals对象 大致与C#(反射

    不,它没有运算符重载。

        3
  •  0
  •   Sean Patrick Floyd    14 年前

    关于字符串连接,我认为这取决于是否将静态字符串添加到一起,或者是否连接变量。对于变量,最好使用StringBuilder。:).

    所以:

    String s = "A";
    s += "B";
    s += "C";
    

    很好。

    但在这里使用StringBuilder更好

    String s = "A";
    s += variable_b;
    s += variable_c;