Chinaunix首页 | 论坛 | 博客
  • 博客访问: 282322
  • 博文数量: 88
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 840
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-20 21:13
文章分类

全部博文(88)

文章存档

2022年(1)

2017年(1)

2016年(2)

2015年(1)

2014年(83)

分类: Java

2014-04-20 22:47:22

创建了一个变量s(不是对象),它引用对象new String("abc").其中"abc"本身也是一个对象,因为编译器为它遇到的每个字符串直接值自动创建一个String对象,例如int len = "Hello World".length(),所以说总共创建了两个String Object.

1、String s="java"; 这里产生得到一个字符串常量。系统首先会去“常量池”寻找,看是否有“java”常量存在,如果有那么就将这个常量“java”赋给s,如果没有则系统在常量池里创建“java”,并将其给s。
2、String s = new String("java"); 意思是根据常量“java”创建一个字符串的对象,如此他首先会执行1中的操作,然后根据常量“java”在堆中创建对象,并为其分配内存。

点击(此处)折叠或打开

  1. public class Test2 {

  2.     public static void main(String[] args) {
  3.         // TODO 自动生成的方法存根
  4.         String str=new String("helloworld");
  5.         //'helloworld' 本身是一个对象,new String()以一个字符串对象为参数进行构造。
  6.         //注意此helloworld存在于堆中而不是字符串常量池中。这个
  7.         //和String s="helloworld"是有明显的区别的,后者是存在于字符串常量池中
  8.         System.out.println(str=="helloworld");    //这一句在字符串常量池中创建了一个常量,两者引用不是同一个
  9.         
  10.         String str1="helloworld";
  11.         System.out.println(str1=="helloworld");    //两者的引用相同
  12.     }
  13. }
结果

点击(此处)折叠或打开

  1. false
  2. true
==两边是判断引用是否相同。对于此问题就看的很清楚了。
阅读(806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~