简易Java(10):Java字符串的“引用传递”
前面有说明“图解Java字符串的不可变性”,后面有解释“为什么Java中的字符串是不可变的? ”。还有一篇与时俱进的“substring()
方法在JDK6和JDK7中的异同 ”。下面,上演第四篇“Java字符串的‘引用传递’”。
这也是一个Java中的一个经典问题。很多类似的问题在StackOverflow被提出。同样有很多不完整甚至不正确的回答。如果不深入思考,这问题很简单。但是,如果我们稍微深究一下,那么她却显得很“迷人”。
前面有说明“图解Java字符串的不可变性”,后面有解释“为什么Java中的字符串是不可变的? ”。还有一篇与时俱进的“substring()
方法在JDK6和JDK7中的异同 ”。下面,上演第四篇“Java字符串的‘引用传递’”。
这也是一个Java中的一个经典问题。很多类似的问题在StackOverflow被提出。同样有很多不完整甚至不正确的回答。如果不深入思考,这问题很简单。但是,如果我们稍微深究一下,那么她却显得很“迷人”。
在“图解Java字符串的不可变性”中,介绍了在Java中字符串是不可改变的。但是,大家有没有想过“为什么字符串是不可变的?”今天就来给大家解释一下这个问题。
通过“
substring()
方法在JDK6和JDK7中的异同 ”这篇文章,让D瓜哥看到,对于字符串的处理也是与时俱进。所以,如果发现下文中如有已经过时之处,请及时指出。D瓜哥也会及时更正的。
这是面试中经常被问到的老问题了。在Java中,将字符串设计成不可变是又很多原因的。一个好的回答需要建立在 阅读全文…
substring()
方法在JDK6和JDK7中的异同看到
substring()
,D瓜哥就想起来去年面试的惨痛精力。连续两次被问到substring()
会造成什么问题;第一次被问到时,确实不知道会造成什么问题,面试结束后就查了查资料。但是,没有认真看。没想到接下来的面试又问到,由于没有看,还是没回答上来,结果面试就惨遭失败!没想到,这次又遇到了
substring()
。所以,这篇文章D瓜哥必须好好翻译!
substring()
会造成什么问题,请看参考资料。另外,需要提前说明一点,本节内容是针对Oracle JDK来说明的,其他JDK的实现也许可能不同。请读者自己查看相关文档以及源代码。
substring(int beginIndex, int endIndex)
方法,在JDK6和JDK7中的实现是不一样的。了解实现的不同之处,可以帮助我们更好地使用这个方法。为了简单起见, 阅读全文…
本节,我们将通过一系列的图片来解释Java String的不可变性。
String s = "abcd";
s
存放了到字符串对象的引用。下面图片中的箭头就代表这种“存放引用”。
double
示例其实,这篇文章所讲内容非常简单、非常基础。相信99%的Java程序员都了解。不过,为了整个《简易Java》系列的完整性,还是把这篇文章翻译出来了。大家可以忽略这篇文章,直接飞过。
你应该遇到过这样的情形,你想得到一个double
类型的数,但是却得到一个int
类型的数。
对于如下方法,devide(2, 3)
将返还0.0。
/** * Coder: D瓜哥,http://www.diguage.com/ */ public static double devide(int x, int y) { return x / y; }
问题就在于 阅读全文…
开发Java程序时,我们想编辑一个.java
文件,然后该文件被编译器编译成.class
文件。Java在运行时,自己加载所需要的类。但是,加载 和 初始化有什么不同,却让人难以区分。一个Java类在何时以及如何被加载和初始化呢?让我们通过下面的例子来给大家清晰地描述一下。
在C/C++中,首先被编译成本地机器代码,然后在编译之后有一个链接过程。所谓链接,就是将不同地方的源代码搜集起来,然后生成一个可执行文件。但是,Java并不这样。在Java中,类似链接的过程是在加载到Java虚拟机时完成的。
不同Java虚拟机,加载类的方式也不同。(D瓜哥注:即使同一个虚拟机,不同的类,加载方式也可能不同。)但是,最基本的加载规则是按需加载。如果已经加载过的类需要其他类,则这些被需要的类就加载。这个加载过程是递归进行的。
在Java语言中,加载规则由ClassLoade来处理。下面, 阅读全文…
代码重用(Code Reuse)是软件开发中重点考虑的因素之一。将常用的功能组织起来,构建成一个“自产自销”的私有库是一个非常好的主意!只要有一些方法被调用,则将其简化成一个方法调用。至于Java,最直接了当的就是管理一个库。在Eclipse中,有个一个简单的例子。为了这个演示构建库的方法,这个库很简单,仅仅包含一个add
方法。
MyMath
的Java项目,然后添加一个库Simple
,然后在类中添加一个方法add
。包(Package)结构如下所示:
HelloWorld
中可以学到什么?HelloWorld
程序是每一个Java程序员都知道的程序。它很简单,但是小事物却包含着大道理,它可以帮助我们更深入的去理解Java中一些更复杂的原理。在这篇文章中,我将向大家说明我们能从这个简单程序中学到什么知识。如果你能从HelloWorld
中体会到更多东西,请留言告知。
public class HelloWorld { /** * Coder: D瓜哥,http://www.diguage.com/ */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Hello World"); } }
Java程序都是从类开始构建的, 阅读全文…