• 关于java中String的一点理解


      String类是java的最基本类之中的一个,非常好的掌握它的原理非常是必要的!

      1、String的Final类型的。是不可继承 的。final类默认的方法都为final类型,保证了方法不能被重载。成员变量不影响
      2、String的本质就是char[] 而且其值是不可改变的
      3、String str = "abc"是一种特殊的创建方式,"abc"存在常量区,str仅仅是对其的引用
      4、String能够通过+串联。形成一个新的对象
      5、java执行时会维护一个String Pool。用来存放程序执行产生的字符串,而且里面的字符串不会反复
      6、创建字符串的方式非常多,归纳起来有三类:
         其一。使用newkeyword创建字符串。比方String s1 = new String("abc");
         其二,直接指定。

    比方String s2 = "abc";
         其三,使用串联生成新的字符串。比方String s3 = "ab" + "c"; 
     

    public class MyString {
    	public static void main(String[] args) {
    		//关于String堆栈分析
    	 
    		String str1 = "abc";
    		System.out.println("abc" == str1);
    		/*1、在栈上分配内存存放str1
    		  2、String池中开辟一块空间。存放String常量"abc";
    		  3、str1指向String池中的"abc";
    		  4、输出true	
    		  */
    		
    		String str2 = new String("abc");
    		System.out.println(str1 == str2);
    		/*1、栈上分配内存存放str2
    		  2、此时的"abc"已经存在,然后将"abc"的引用传给String的构造函数。在堆上创建一个新的String对象
    		   	then the JVM still arranges for "abc" to be in that pool, and still
    			provides a reference to it, but that reference is then passed into a
    			constructor to create a NEW String object that's NOT in the pool and
    			copies the first one. It's that second String object which ends up
    			being assigned to the reference
    		  3、str2指向在堆上的新创建的对象。
    		  4、输出false		
    		  */
    		
    		String str3 = "a"+"bc";
    		System.out.println("abc" == str3);
    		/*1、栈上分配内存存放str3
    		  2、依据编译器合并已知量的优化功能,池中开辟一块空间,存放合并后的String常量"abc" 
    		  3、str3指向在堆上的"abc"’
    		  4、输出true		
    		 */
    		
    		String str4 = "a";
    		String str5 = "bc";
    		String str6 =str4+str5;
    		System.out.println("abc" == str6);
    		/*1) 栈中开辟一块中间存放引用s1,s1指向池中String常量"a"。 
    		2) 栈中开辟一块中间存放引用s2。s2指向池中String常量"b", 
    		3) 栈中开辟一块中间存放引用str5, 
    		4) s1 + s2通过StringBuilder的最后一步toString()方法还原一个新的String对象"ab",因此堆中开辟一块空间存放此对象, 
    		5) 引用str6指向堆中(s1 + s2)所还原的新String对象, 
    		6) str6指向的对象在堆中,而常量"ab"在池中,输出为false
    		 */
    		
    		String str7 = new String("abc");
    		String str8 = new String("abc");
    		if(str7 == str8){
    			System.out.println("str7 等于str8");
    		}else{
    			System.out.println("str7 不等于str8");
    		}	
    		//输出str7 不等于str8
    	}
    }


     

  • 相关阅读:
    java实现遍历树形菜单方法——设计思路【含源代码】
    java实现动态验证码源代码——接受ajax的jsp
    java实现动态验证码源代码——接受ajax的jsp
    java实现动态验证码源代码——绘制验证码的jsp
    java实现动态验证码源代码——绘制验证码的jsp
    java实现动态验证码源代码——jsp页面
    java实现动态验证码源代码——jsp页面
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——struts.xml配置详情
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——struts.xml配置详情
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8387509.html
Copyright © 2020-2023  润新知