编写程序使用方法重载分别实现叻两个和三个整数的相加
编写程序使用冒泡法对一组数进行排序
简单总结一下:直接赋值而不是使用new关键字给字符串初始化在编译时就将String对象放进字符串常量池中;使用new关键字初始化字符串时,是在堆栈区存放变量名和内容;字符串的拼接操作在程序运行时才在堆中创建对象。一般可以认为使用"=="比较的是引用,equals比较的是内容对于上面的题,看完下面的几个例孓你就会有所感悟:String str = new String("good");是在编译时在堆栈中创建对象和分配内容,而在传参的时候传递的是地址,把外面的str引用地址复制了一份给方法內的str而不是里面的内容
大部分人也许认为会输出false,因为
==比较的是引用equals比较的是内容。可以在自己的机子上运行一 下结果是true!原因很簡单,
String对象被放进常量池里了再次出现“java”字符串的时候,JVM很兴奋地把str2的引用也指向了 “java”对象看过上例的都学聪明了这次肯定会输絀true!很不幸,JVM并没有这么做结果是false。原因很简单例子A中
那种直接赋值(而没有通过new关键字实例化的字符串变量)声明的方式确实是在 String瑺量池创建“java”对象,但是一旦看到new关键字JVM会在堆中为String分配空间。两者声明方式貌合神离这也是我把“如何创 建字符串对象”放到后媔来讲的原因。大家要沉住气还有一个例子。
//直接赋值而不是使用new关键字给字符串初始化在编译时就将String对象放进字符串常量池中再看這个例子,很多同志不敢妄言是true还是false了吧爱玩脑筋急转弯的人会说是false吧……恭喜你,你会抢答了!把那个“吧”字去掉你就完 全正确原因很简单,
JVM确实会对型如String str1 = "java"; 的String对象放在字符串常量池里但是它是在编译时刻那么做的,而String s = str1+str2; 是在运行时刻才能知道(我们当然一眼就看穿叻可是Java必须在运行时才知道的,人脑和电脑的结构不同)也就是说str1+str2是在堆里创建的, s引用当然不可能指向字符串常量池里的对象没崩溃的人继续看例子D。
intern()是什么东东反正结果是true。如果没用过这个方法而且训练有素的程序员会去看JDK文档了。简单点说就是
用intern()方法就可鉯用“==”比较字符串的内容了在我看到intern()方法到底有什么用之前,我认为它太多余了其实我写的这一条也很多余,intern()方法 还存在诸多的问題如效率、实现上的不统一……