网站开发付款方式,做网站怎么去找客户,浙江省城乡和建设厅网站首页,微信二维码在线制作String 对象的两种创建方式#xff1a;
String str1 abcd;//先检查字符串常量池中有没有abcd#xff0c;如果字符串常量池中没有#xff0c;则创建一个#xff0c;然后 str1 指向字符串常量池中的对象#xff0c;如果有#xff0c;则直接将 st…String 对象的两种创建方式
String str1 abcd;//先检查字符串常量池中有没有abcd如果字符串常量池中没有则创建一个然后 str1 指向字符串常量池中的对象如果有则直接将 str1 指向abcd
String str2 new String(abcd);//堆中创建一个新的对象
String str3 new String(abcd);//堆中创建一个新的对象
System.out.println(str1str2);//false
System.out.println(str2str3);//false
这两种不同的创建方法是有差别的。
第一种方式是在常量池中拿对象第二种方式是直接在堆内存空间创建一个新的对象。
记住一点只要使用 new 方法便需要创建新的对象。 String 类型的常量池比较特殊。它的主要使用方法有两种
直接使用双引号声明出来的 String 对象会直接存储在常量池中。如果不是用双引号声明的 String 对象可以使用 String 提供的 intern 方法。String.intern() 是一个 Native 方法它的作用是如果运行时常量池中已经包含一个等于此 String 对象内容的字符串则返回常量池中该字符串的引用如果没有JDK1.7之前不包含1.7的处理方式是在常量池中创建与此 String 内容相同的字符串并返回常量池中创建的字符串的引用JDK1.7以及之后的处理方式是在常量池中记录此字符串的引用并返回该引用。String s1 new String(计算机);String s2 s1.intern();String s3 计算机;System.out.println(s2);//计算机System.out.println(s1 s2);//false因为一个是堆内存中的 String 对象一个是常量池中的 String 对象System.out.println(s3 s2);//true因为两个都是常量池中的 String 对象 字符串拼接: String str1 str;String str2 ing;String str3 str ing;//常量池中的对象String str4 str1 str2; //在堆上创建的新的对象 String str5 string;//常量池中的对象System.out.println(str3 str4);//falseSystem.out.println(str3 str5);//trueSystem.out.println(str4 str5);//false 尽量避免多个字符串拼接因为这样会重新创建对象。如果需要改变字符串的话可以使用 StringBuilder 或者 StringBuffer。
将创建 1 或 2 个字符串。如果池中已存在字符串常量“abc”则只会在堆空间创建一个字符串常量“abc”。如果池中没有字符串常量“abc”那么它将首先在池中创建然后在堆空间中创建因此将创建总共 2 个字符串对象。
验证 String s1 new String(abc);// 堆内存的地址值String s2 abc;System.out.println(s1 s2);// 输出 false,因为一个是堆内存一个是常量池的内存故两者是不同的。System.out.println(s1.equals(s2));// 输出 true
结果
false
true