码迷,mamicode.com
首页 > 编程语言 > 详细

java基础

时间:2014-12-19 20:36:28      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

第一篇:讲讲String

public static void main(String[] args) {

String s1 = new String("hello");//2个对象
String s2 = "hello";//没有创建
String s3 = new String("hello");//1个对象
String s4 = "hello";//没有创建
//因此上面只产生了3个对象 字符串池1个,堆2个

//这里每次赋值的时候,首先都会判断字符串池里面有没这个字符串值,如果有,则引用存在的,如果没有,则创建。

//上面的解释:String是有一个叫字符串池,首先会判断字符串池里面是否有这个字符串,如果没有,则在字符串池创建一个字符串,并且由是s1指向他,然后有new操作符,就在堆内存创建一个对象,值为hello,并且也是s1指向了他。
//第二条是判断字符串池了有没这个值的字符串,有,不在字符串池创建,直接有s2指向了hello值的内存地址,相当于是s1和s2在字符串池都指向了同一块内存地址,值为hello
//第三条只在堆内存中创建一个对象,s3同时指向了字符串池和堆内存的地址,值都为hello



//==比较的是内存地址值
System.out.println(s1==s2);//false
System.out.println(s2==s3);//false
System.out.println(s1==s3);//false
System.out.println(s4==s2);//true 都指向了字符串池的"hello"
System.out.println(s1.intern()==s4);//true String的intern()方法(表示其字符串池中字符串的地址)
System.out.println(s1.intern()==s3);//false


String hello = "AYEP";
String yep = "YEP";

System.out.println(hello=="A"+"YEP");//true 字面值常量相加等于直接相加然后在字符串池存储
System.out.println(hello=="A"+yep);//false 字面值与变量相加,会在堆区产生一个新的对象,因此就有一个地址值

java基础

标签:

原文地址:http://www.cnblogs.com/hjy9420/p/4174610.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!