C#程序员的高级Java主题

Chr*_*s S 4 c# java pass-by-reference

我是一名编写Java(适用于Android)的C#程序员,并且有一些Java的技术细节,我仍然不确定,并担心我从C#角度接近:

  • 方法中的参数是否以与C#相同的方式传递?(复制参考类型)
  • 为什么突然出现@Override属性(我认为它是Java 1.5+?)
  • 如果您缺少某个正在使用的库的依赖项,如何编译应用程序?
  • 我是否需要担心使用+ =进行大字符串连接(例如使用StringBuilder)
  • Java是否有运算符重载:我应该equals()默认使用或==.基本上是object.equals与C#大致相同(值类型的反射,引用类型的地址引用)

Jon*_*eet 10

回答顺序:

  • 是的,参数总是通过Java中的值传递.这包括被复制的引用(而不是被复制的对象).请注意,Java没有任何等效的ref或out
  • @Override允许你在编译时捕获拼写错误,就像C#中的"override"修饰符一样
  • 您只针对您正在使用的库编译应用程序.没有传递依赖性检查,就像.NET中没有.
  • 是的,你应该避免在循环中连接字符串,就像在.NET中一样.单语句连接很好,就像在.NET中一样 - 再次,编译器将在编译时执行常量表达式的连接,并且字符串文字被实现.
  • 不,Java没有用户定义的运算符重载.Java中没有自定义值类型; ==始终比较原始值或引用.(如果你比较一个Object引用值和一个原始值,自动装箱/拆箱就会涉及到,我永远无法记住这种方式的工作原理.虽然这是一个坏主意,IMO.)