String类构造方法

 package pack1;
//推荐使用直接赋值的方式得到字符串
public class test {
public static void main(String[] args) {
//public String(): 创建一个空白字符串对象,不含有任何内容
String s1=new String();
System.out.println("s1:"+s1); //"s1: " //public String(char[] chs):根据字符数组的内容,来创建字符串内容
char[] chs={'a','b','c'};
String s2=new String(chs);
System.out.println("s2: "+s2); //"s2: abc" //public String(byte[] bys): 根据字节数组的内容,来创建对象
byte[] bys={97,98,99};
String s3=new String(bys);
System.out.println("s3: "+s3); // "s3: abc" //public s="abc"; 直接赋值方式创建字符串对象,内容就是abc
String s4="abc";
System.out.println("s4 "+s4); //"s4: abc"
}
}

String类特点:

变量s1,s2,s3,s4在main函数的栈内存中,他们指向堆内存地址。char数组首先在栈内存开辟空间,然后new String()操作在堆内存中创建索引变量ref(用来链接堆内存中数组的首地址),可以看出s1,s2指向的地址是不同的,但是他们的堆内存中的索引都指向char数组。再来看s3,s4,用String s=“abc”方式创建出来的对象,字符串会被存储在堆内存中的常量池,如果有别的对象也用该方式创建,并且字符串完全一致,则共享常量池内的该字符串。

注意:如果再来一句 s3="hdu"; s4的值会改变么?我试了一下,发现s4是不会改变的,所以执行该语句时,是又在堆内存的常量池中创建了一个“hdu”字符串,然后将其首地址赋给了s3,期间并不会改变s3所指向的地址,也不会改变常量池中的“abc”字符串。

String类对象的比较

 package pack1;
//推荐使用直接赋值的方式得到字符串
public class test {
public static void main(String[] args) {
//构造函数得到对象
char[] chs={'a','b','c'};
String s1=new String(chs);
String s2=new String(chs); //直接赋值的方式得到对象
String s3="abc";
String s4="abc"; //比较字符串对象地址是否相同
System.out.println(s1==s2); //false
System.out.println(s1==s3); //false
System.out.println(s3==s4); //true
System.out.println("------------"); //比较字符串内容是否相同
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //true
System.out.println(s1.equals(s4)); //true
}
}

最新文章

  1. MySQL3:索引
  2. 金旭亮老师的Scoekt编程摘要
  3. messages.exe病毒的清理
  4. MYbatis调试日记(三)
  5. C语言-03流程控制
  6. Auto Install Workflow Manager 1.0
  7. Delphi函数指针的两种定义(对象方法存在一个隐藏参数self,所以不能相互赋值)
  8. BS结构中,web如何将数据进行DES加密并写道IC卡中
  9. MyBatis之级联——一对多关系
  10. HDU3844Tour (好题)
  11. android动画源码合集、动态主题框架、社交app源码等
  12. FastDFS分布式存储实战
  13. WP-player——WordPress的一款好用的音乐插件
  14. Sql Server服务远程过程调用失败
  15. WiFi攻击中“核武器”
  16. javascript生成器
  17. python学习笔记(10)--组合数据类型(字典类型)
  18. bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
  19. JVM内存模型、指令重排、内存屏障概念解析(转载)
  20. orm查询语法参考文章

热门文章

  1. volatile简记
  2. Shell—各种括号的用法
  3. Linux-3.14.12内存管理笔记【建立内核页表(3)
  4. Linux:VIM编辑器的使用
  5. CodeForces 862B(思维+二分图染色)
  6. golang数据结构之选择排序
  7. C语言程序设计100例之(1):鸡兔同笼
  8. 21个Java Collections面试问答
  9. Flink on Yarn的两种模式及HA
  10. 【Oracle命令 】使用的sql语句之分组查询(group by)