• Java基础_0307:String类的基本概念


    String类的两种实例化方式

    • 直接赋值:
    String str = "www.YOOTK.com";
    
    • 构造方法:
    构造方法:public String(String str),在构造里面依然要接收一个String类对象;
    String str = new String("www.YOOTK.com");
    
    字符串的比较

    “==”是Java提供的关系运算符,主要的功能是进行数值相等判断的,
    如果用在了String对象上表示的是内存地址数值的比较

    equals()”:是由String提供的一个方法,此方法专门负责进行字符串内容的比较
    内容比较操作(区分大小写):

    public boolean equals(String str);
    
    在String对象上使用“==”比较
    public class StringDemo {
    	public static void main(String args[]) {
    		String stra = "hello";		// 直接赋值定义字符串
    		String strb = new String("hello");	// 构造方法定义字符串
    		String strc = strb; 			// 引用传递
    		System.out.println(stra == strb); // 比较结果:false
    		System.out.println(stra == strc); 	// 比较结果:false
    		System.out.println(strb == strc); 	// 比较结果:true
    		System.out.println(stra);
    		System.out.println(strb);
    	}
    }
    程序执行结果:
    false
    false
    true
    hello
    hello
    
    
    “==”比较内存分析

    实现字符串内容比较
    public class StringDemo {
    	public static void main(String args[]) {
    		String stra = "hello";	// 直接赋值定义字符串
    		String strb = new String("hello");// 构造方法定义字符串
    		String strc = strb; 		// 引用传递
    		System.out.println(stra.equals(strb)) ;	// 比较结果:true
    		System.out.println(stra.equals(strc)) ;	// 比较结果:true
    		System.out.println(strb.equals(strc)) ;	// 比较结果:true
    	}
    }
    程序执行结果:
    true(“stra.equals(strb)”比较结果)
    true(“stra.equals(strc)”比较结果)
    true(“strb.equals(strc)”比较结果)
    
    字符串常量就是String的匿名对象

    任何的编程语言都没有提供字符串数据类型的概念,很多的编程语言里面都是使用了字符数组来描述的字符串的定义。同样在Java里面也没有字符串的概念,但由于所有的项目开发中都不可能离开字符串的应用,那么最终的结果是:Java创造了属于自己的特殊类 —— String(字符串),同时也规定了所有的字符串要求使用“"”声明,但是String依然不属于基本数据类型,所以字符串数据实际上是作为String类的匿名对象的形式存在的。

    观察字符串是匿名对象的验证
    public class StringDemo {
    	public static void main(String args[]) {
    		String str = "hello";						// str是对象名称,而"hello"是内容
    		System.out.println("hello".equals(str));	// 内容比较,由字符串直接调用
    	}
    }
    程序执行结果:
    true
    
    
    String类对象两种实例化方式的区别

    直接赋值:String str = "hello" ;

    观察直接赋值时的堆内存自动引用
    public class StringDemo {
    	public static void main(String args[]) {
    		String stra = "hello";		// 直接赋值实例化
    		String strb = "hello";		// 直接赋值实例化
    		String strc = "hello";		// 直接赋值实例化
    		String strd = "yootk" ;		// 直接赋值实例化,内容不相同
    		System.out.println(stra == strb); 	// 判断结果:true
    		System.out.println(stra == strc); 	// 判断结果:true
    		System.out.println(strb == strc); 	// 判断结果:true
    		System.out.println(stra == strd); 	// 判断结果:false
    	}
    }
    
    程序执行结果:	true(“stra == strb”语句输出)
    true(“stra == strc”语句输出)
    true(“strb == strc”语句输出)
    false(“stra == strd”语句输出)
    
    
    内存分配

    分析构造方法实例化String类对象的情况
    果要明确的调用String类中的构造方法进行String类对象的实例化操作,那么一定要使用关键字new,而每当使用了使用了关键字new就表示要开辟新的堆内存空间,而这块堆内存空间的内容就是传入到构造方法中的字符串数据。
    
    不自动保存对象池操作
    public class StringDemo {
    	public static void main(String args[]) {
    		String stra = new String("hello");	// 使用构造方法定义了新的内存空间,不会自动入池
    		String strb = "hello";		// 直接赋值
    		System.out.println(stra == strb);	// 判断结果:false
    	}
    }
    程序执行结果:	false
    
    保存到对象池
    
    如果现在希望开辟的新内存数据也可以进行对象池的保存,那么可以采用String类定义的一个手工入池的操作:
    保存到对象池:public String intern();
    public class StringDemo {
    	public static void main(String args[]) {
    		String stra = new String("hello").intern();	// 使用构造方法定义了新的内存空间,手工入池
    		String strb = "hello";		// 直接赋值
    		System.out.println(stra == strb);	// 判断结果:true 
    	}
    }
    程序执行结果:	true
    
    
    修改字符串对象引用
    public class StringDemo {
    	public static void main(String args[]) {
    		String str = "Hello ";	// 直接赋值实例化String类对象
    		str = str + "World ";// 字符串连接,同时修改String类对象的引用关系
    		str += "!!!";	// 字符串连接,同时修改String类对象的引用关系
    		System.out.println(str);// 输出当前的String类对象内容
    	}
    }
    程序执行结果:
    Hello World !!!
    
    

  • 相关阅读:
    bzoj2143 飞飞侠
    Codeforces 543.B Destroying Roads
    Codeforces 666.B World Tour
    bzoj2441 [中山市选2011]小W的问题(debug中)
    bzoj2329 [HNOI2011]括号修复
    一些新发现的好东西
    < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />的作用
    js经典代码技巧学习之一:使用三元运算符处理javascript兼容
    《javascript高级程序设计》笔记4.1.4:检测类型
    页面关闭和刷新事件
  • 原文地址:https://www.cnblogs.com/xuwei1/p/8343560.html
Copyright © 2020-2023  润新知