public class StringTest {
public static void main(String[] args) {
String s1 = "a";//生成一个对象或者不生成对象(在字符串常量池中如果有a就不生成,如果没有就生成一个)
/* 生成两个或者一个对象(在堆内存生成一个对象b,在字符串常量池再生成一个b(如果常量池中已经有b的话,就不生成,此时只生成一个对象),
* 因为JVM的处理是:
* 在运行过程中生成的所有字符串都要在字符串常量池中有:
* 如果常量池中有了就不生成,如果没有就生成一个)
*/
String s2 = new String("b");
String s3 = s1+"b";
String s5 = "ab";
String s4 = "a"+"b";
/* 结果为false
* JVM的处理方式是:运行时候生成的对象都保存在堆内存中!
* s1是一个对象的引用,必须在运行的时候才能处理,所以s3指向的对象是在运行的时候生成的。
* 因为String在jdk中的定义是final的,所以s5这种直接定义字符串的方式其实相当于常量。常量初始化就就有固定值的,且编译以后直接存在字节码中。
* 常量字符串的处理方式是:JVM加载的时候,直接从字节码中获取字符串,然后放入字符串常量池中。
* 所以:s3指向的是堆内存中的对象,而s5指向的是字符串常量池中的对象,必然不是同一个对象,结果为false
*/
System.out.println(s3==s5);
/* 结果为true
* 因为字符串相当于常量,所以s4在经过编译以后(经过编译器优化),在字节码中也是直接存储为ab的,当jvm加载的时候处理方式和s5就是一样的。
* 所以他们都指向字符创常量池中的ab,结果为true
*/
System.out.println(s4==s5);
}
}
相关推荐
String b =new String("abc"); //创建字符串方式2 System.out.println(a==b); //false,内存地址不相等 String c =new String("abc"); String d =new String("abc"); System.out.println(c==d...
java字符串操作大全,适合初学者,浅显易懂 部JAVA字符串操作 2008-07-11 15:39:42| 分类: JAVA | 标签: |字号大中小 订阅 . JAVA字符串的方法 String a = "53c015"; //Integer.parseInt(s, radix) radix设置为...
Java语言程序设计(第3版) 不能使用"=="号来比较字符串内容是否相等 比较内容是否相等: boolean equals(String str) boolean equalsIgnoreCase(String str) s1 s2 Hello Hello 字符串常量池 s1 s2 Hello Java语言...
public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写 public class StringDemo02 { public static void main(String[] args) { //构造方法的方式得到对象 char[] chs = {'a', 'b', 'c'}; ...
数字、字符串、布尔、null、undefined 属于原始资料类型,而Number、String、Boolean属于包装类型,通过new Number 创建的是包装类型的派生对象。所以两者是不等的。 直接赋值为基本类型之后的使用过程如下: 1、...
Java字符串的方法 1、length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.length(); 2、charAt() 截取一个字符 例:char ch; ch="abc".charAt(1); ...
面向对象基础 面向对象和面向过程的区别 成员变量与局部变量的区别 创建一个对象用什么运算符?对象实体与对象引用有何不同? 对象的相等和引用相等的区别 ...String s1 = new String("abc");这句话创建了几个
Java:分割字符串不能写成split(“$”)//$为要分割的字符 Android:分割字符串需要加上中括号split(“[$]”)//$为要分割的字符 2.特殊用法–当split()分割字符串遇上特殊符号 案例分析 String str = abc|dfg; ...
StringBuffer/StringBuilder 表示的字符串对象可以直接进行修改 StringBuffer是线程安全的,他的方法都被synchronized修饰过,StringBuilder 是线程不安全的,通常效率要比StringBuffer要高一点
字符串是一个特殊的对象。 字符串一旦初始化就不可以被改变。 String str = “abc”; String str1 = new String(“abc”); 有什么区别 ? String类部分方法 char charAt(int index) int length() char[] ...
通过new对象 String str = new String(“abc”); String不可变特性:长度、内容 Private final char value[]; 内容不是真的不可变,可以通过反射的技术进行修改 反射 reflect 类是用来描述一组对象 反射机制...
* 读取文件并返回为给定字符集的字符串. * @param fileName * @param encoding * @return * @throws Exception */ public static String readFileAsString(String fileName, String encoding) throws ...
答:首先创建一个字符串变量有两种方式: String str = new String<"abc">; String str = "abc"; 使用"= ="会因为创建的形式不同而产生不同的结果: String str1 = "abc"; String str2 = "abc"; System.out....
分享几个经常用到的字符串的截取 string str="123abc456"; int i=3; 1 取字符串的前i个字符 str=str.Substring(0,i); // orstr=str.Remove(i,str.Length-i); 2 去掉字符串的前i个字符: str=str.Remove(0,i); //...
本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Java的String类是不可变对象?让我们一起来分析一下。 答案一: 流行的Java面试题之一是:什么是不可变对象(immutable ...
反回 字符串 * ============================================== * FindString(string,str);反回 布尔型 * ============================================== * Is(str,string); 反回 布尔型 * ...
字符串文字"abc"是一个String对象; 文字池[pool of literal strings]和堆[heap]中的字符串对象。 一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。A aa...
/*本版本处理方式为最通用的针对字符串大小未知情况的遍历——比如“字符串常量”——此时可用strlen()代替sizeof(),并引入<string.h>即可。 *但是因在纸上做题,在条件上做了简化————使用了sizeof()可确定...
String 字符串对象 1. 介绍 String 对象,对字符串进行操作,如:截取一段子串、查找字符串/字符、转换大小写等等。 2. 定义方式 2.1 new String(Value) 构造函数:返回一个内容为Value的String对象 参数: ①...
.NET获取Html字符串中指定标签的指定属性的值 本代码为C#获取字符串中Html的指定标签的指定属性的值 ...要获取以上字符串中的img中的src或是a中的href等的值 GetHtmlAttr(tempstr,"img","src")这样就能获取到。