一、数据类型
java中数据类型分为基本数据与引用数据类型两大类,其中又有更细致的划分,下面以图展示
二、基本数据类型封装类
Java是一门面向对象的语言,但是在一些情况下基本数据类型无法满足Java面向对象的特性,我们便可以调用包装类的方法完成我们所需要的操作
三、String类
1.String类的两种实例化方式
String是一个很特殊的类,我们通常称呼它为字符串,它既可以采用基本数据类型一样的赋值方式,也可以采用类的方式new一个对象
范例:String str="Hello";
String str=new String("Hello");
2.字符串之间的比较
说到比较就不得不说 == 和 equals() 方法之间的区别了
“==” 操作符专门用来比较两个变量之间的值是否相等,也就是要比较两个基本类型的数据之间的值是否相等,只能用“==”操作符
如果一个变量指向的数据是对象类型的,那么这时候涉及到了两块内存空间, 如 String str = new String("hello"),变量(在对象这里也叫对象引用名)str占用一块内存(栈空间),对象本身new String("hello")占用的是另一块内存(堆空间),此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。如果要比较两个变量是否指向同一个对象(即看这两个变量所对应的内存中的数值是否相等),这时候就需要使用“==”操作符进行比较了
equals() 方法是用于比较两个独立对象的内容是否相同,比如说两本一年级语文书,用==比较的就是这两本语文书是否是同一本一年级语文书,很明显是false,用equals比较的就是这两本语文书是否内容相同,很明显是true
讲明白这些,接下来讲一下字符串之间的比较
(1) 使用 == 比较字符串
String str1 = "hello" ; String str2 = new String("hello"); System.out.println(str1 == str2) ;
控制台输出:false
见解:因为str1和str2保存在栈内存中,分别存放了两个对象所保存的内存地址的数值,因此不相等。这种比较属于地址数值比较,并没有比较对象的内容
(2) 使用 equals() 比较字符串
String str1 = "hello" ; String str2 = new String("hello"); System.out.println(str1.equals(str2))
控制台输出:true
(3)
String str1 = "hello" ; String str2 = "hello" ; System.out.println(str1 == str2) ; System.out.println("hello" == str2) ; System.out.println("hello" == "hello") ;
控制台输出:全为true
见解:在JVM的底层实际上会自动维护一个对象池(字符串对象池),如果现在采用了直接赋值的模式对String类对象的实例化操作,那么该实例化对象(字符串)将自动的保存到这个对象池之中。如果下次继续有人使用了直接赋值的模式声明了String类的对象,那么如果此时对象池之中有指定的内容,将进行直接引用,如果没有,则开辟新的字符串对象,而后将其保存在对象池之中以供下次使用(所谓的对象池就是一个对象数组)
3.字符串特性
(1)不可变性:由于字符串是不可变的。所以每次修改字符串都是创建一个单独的字符串副本(又拷贝了一个字符串);
(2)字符串池:当程序中有多个相同的字符串常量时,这时,这些字符串都是指向内存中的同一个字符符串,这个特性叫做:字符串池。之所以字符串池不会造成程序的混乱,也是因为:字符串具有不可变性;
(3)字符串留用(不常用,因为会有一定的内存损耗);
(4)字符串底层实际上就是字符数组,这也是字符串不可变特性的原因之一。
四、Java编程基本规范
良好的Java书写规范,是一名合格的Java开发者所必须具备的条件之一,同时也能保证我们在编程中出错率减少。
在各个文件中,变量名、方法名、类名注意命名时应当见名知义
规则:即为前人定义好的,不可违背
字母(Java中大小写敏感)、数字(不允许为开头)、符号(英文符号_$)、中文(不推荐,就当没有)
规约:即为后来者约定俗成的的规则
类名
首字母大写 两个以上的单词所有首字母大写,即为驼峰命名法
如:SuperPerson
变量名
首字母小写 两个以上的单词,之后的单词首字母大写
如:personName
常量名
字母全大写
如:PERSONCULTURE
方法名
首字母小写 两个以上的单词,之后的单词首字母大写
如:personEat