public class Test{
public static void main(String[] args){
String S1=new String("abc");
String S2="abc";
String S3="abc";
String S4=new String("abc");
System.out.println(S1==S2);
System.out.println(S2==S4);
System.out.println(S2==S3);
System.out.println(S1==S4);
}
}
运行的结果是:
false
false
true
false
原因的解释:
字符串是一个比较特殊的对象。
字符串之所以特殊,是因为java会在内容中为String类型的对像开辟一个空间,我们叫他串池!
字符串对象的创建之后会被放入到串池中。
串池有一个特点,就是对于相同对象,池中只存储一份。
那么串池把神马样的String看做是相同的String呢。请看:
String a="abc";和String b="abc" 对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一分,只是有a 和b 两个引用罢了!
对于String只要用new关键字new出来的string,都是单独的一个对象。
而“==”号,他是用来比较对象的内存地址,所以只要用==号来比较string,只要不是自己比自己,那肯定是false。
而String中的equls方法已经做了处理,他是比较内容,所以要比较string的内容的时候而不是地址的时候,那就用它。
分享到:
相关推荐
创建String字符串 目录 课程导入 掌握String字符串对象的创建 掌握字符串对象的输入与输出 一般程序需要处理大量文本数据Java语言的文本数据被保存为字符或字符串类型。 若干个字符在计算机里面如何存储? 如何引用...
软件介绍: showstring能够打开可执行文件EXE/DLL,从中搜索并替换指定的字符串。支持ASCII/UNICODE类型的字符串。能逐个字符地扫描文件,根据选项要求来设定如何搜索。
String int 字符串常量池 包装类型 函数参数 值传递引用传递 的 内存分配例子——源码 public static void fun_ref (Ref_test ref_out){ Ref_test ref_in=new Ref_test(); ref_in.s1="in"; //ref_out.s1=...
在一个进程的内存里查找特定值字符串等 procedure ShowArrayTValueAddress(); //显示当前任务查出的地址列表 procedure ShowMemEditAddressList(); //显示当前的修改列表 procedure OnWMHOOKPROC(var Msg: ...
通常,字符串应该使用 ByVal 方式传递到 APIs。Visual Basic 使用被称为 BSTR 的 String 数据类型,它是由自动化(以前被称为 OLE自动化)定义的数据类型。一个 BSTR 由头部和字符串组成,头部包含了字符串的长度...
Delphi结构中使用String时遇到的内存泄露问题(没有利用String的引用计数自动销毁字符串的功能) .mht
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。...
String对象是不可变的。JVM对其做了一个优化,在内存中开辟了一段区域作为字符串常量池。通过"字面量"形式创建的字符串对象都会缓存并重用。
//比较两个字符串大小 unsigned char *st_strcpy(unsigned char *t,unsigned char *s);//字符串拷贝 signed int st_strncmp(unsigned char *dest,unsigned char *src,unsigned int Len);//可变长度字符串大小比较 ...
字符串0GC补充方案 , 整体思想是用1点多MB的内存空间换取0GC。详细报告可以查看网址:https://coh5.cn/p/1ace6338.html
File String Finder能够从指定范围内查找全部或部分文件名,查找文件中的一个字符或短语,支持区分大小写,支持以文本/十六进制类型,当FileStringFinder在文件中搜索字符串时,它只读取部分文件.这些部分与你...
(2)byte[] bt=Convert.FromBase64String(“字符串”); 2.字符串转流 代码如下:(1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes(“字符串”)); (2)MemoryStream ms=new MemoryStream...
c++封装的String类,采用了预分配内存和Copybeforewrite技术。效率很高。
面试和笔试常用的一些与字符串搜索和排序转换等算法,包括String相关的函数,链表的一些应用等
为了避免每次都创建相同的字符串对象及内存分配,JVM内部对字符串对象的创建做了一定的优化,在Permanent Generation中专门有一块区域用来存储字符串常量池(一组指针指向Heap中的String对象的内存地址)。...
C语言bcopy()函数:复制内存(字符串) 头文件: #include <string> bcopy() 函数用来复制内存(字符串),其原型为: void bcopy(const void *src, void *dest, int n); 【参数】src 为源内存块(字符串)指针,...
6.1.1 字符串比较 Java语言程序设计(第3版) 不能使用"=="号来比较字符串内容是否相等 比较内容是否相等: boolean equals(String str) boolean equalsIgnoreCase(String str) s1 s2 Hello Hello 字符串常量池 s1 s2...
C 语言中的字符串只是存储在连续内存区域中的字符序列。关于字符串的一个区别是,在序列的最后存储了一个终止的空字节/0,表示一个字符串的结束。如果我们用 [] 符号声明一个固定的 char 数组,那么我们就可以在该...
SuperString 一个用于C 的快速内存优化字符串库