您的位置:首页 > 编程语言 > Java开发

引用数据类型及与基本数据类型的区别

2016-10-25 16:48 423 查看
引用数据类型的定义

在Java中,除了基本数据类型的变量以外,其余的全都属于引用数据类型,

包括

*API中的类,如String、File等

*数组

*自定义的类,如Cars、Student

*对象全部是引用数据类型



String类中提供length成员方法 ,用来获得字符串的长度,方法原型:int length()

该方法返回字符串中有效字符的个数。

public class StringDemo

{

public static void main(String[] args)

{

String str1 = “John Smith”;

String str2 = new String(“I Love Java”);

System.out.println(str1.length());
System.out.println(str2.length());


}

}

String的两种赋值方式

第一种:

String s1 = “ec”;

String s2 = “ec”;

s1 == s2 //true

第二种:

String s1 = new String(“etc”);

String s2 = new String(“etc”);

s1==s2//false

比较值:s1.equals(s2);

String 与StringBuffer,StringBuilder的区别

String

String ss1 =s1.toUpperCase();

生成新对象

StringBuffer/StringBuilder:

sb1.append(“ETC”);

在当前对象上面进行改变

public class StringDemo {

public static void main(String[] args) {

String str1 = “ICSS”, str2 = “ICSS”;

String str3 = new String(“ETC”), str4 = new String(“ETC”);

if (str1 == str2) {

System.out.println(“str1和str2指向同一字符串”); }

else {

System.out.println(“str1和str2分别指向不同字符串”); }

if (str1.equals(str2)) {
System.out.println("str1和str2的内容完全相同"); }
else {
System.out.println("str1和str2的内容不相同"); }

if (str3 == str4) {
System.out.println("str3和str4指向同一字符串"); }
else {
System.out.println("str3和str4分别指向不同字符串"); }

if (str3.equals(str4)) {
System.out.println("str3和str4的内容完全相同");}
else {
System.out.println("str3和str4的内容不相同"); }


}

}





public class StringDemo

{

public static void main(String[] args)

{

String strEmail = “java@sun.com”;

int index;

System.out.println("E-mail地址:" + strEmail);

index = strEmail.indexOf('@');
System.out.println("@字符出现的索引:" + index);
index = strEmail.indexOf("sun");

System.out.println("字符串\"sun\"出现的索引:" + index);
index = strEmail.lastIndexOf('a');

System.out.println("a字符最后一次出现的索引:" + index);


}

}





public class StringDemo

{

public static void main(String[] args)

{

String str1 = “Java is OOP”;

String str2;

str2 = str1.toLowerCase();
System.out.println(str2);

str2 = str1.toUpperCase();
System.out.println(str2);
}


}



基本数据类型之间赋值,是将值进行拷贝

例:int x=10;

int y=9;

x=y;

引用类型的赋值都是通过new调用构造方法

例:Student stu1 = new Student(“Alice”,18);

Student stu2 = new Student((“John”,17);

引用类型之间赋值,是虚地址之间的赋值

例:stu1=stu2; stu2赋值给stu1,指的是把stu2的虚地址赋值给stu1,也就是二者将指向同一个实际对象John

==运算

在判断引用数据类型时判断的是地址,即虚地址一样才返回true

在判断基本数据类型时判断的是数值,即二进制一样才返回true



每个包装类都有一个静态的valueOf方法,用于将字符串转换成相应包装类的对象。

public class LangDemo {

public static void main(String[] args) {

String str = “120”;

//如果转换失败,将会引发NumberFormatException异常

Byte objByte = Byte.valueOf(str);

Short objShort = Short.valueOf(str);

Integer objInt = Integer.valueOf(str);

Long objLong = Long.valueOf(str);

System.out.println(objByte);
System.out.println(objShort);
System.out.println(objInt);
System.out.println(objLong);


}

}

除了Boolean类和Character类以外,其它的包装类都有静态的parseXxx方法(Xxx指代具体的数据类型),用于将字符串转换成相对应的基本数据类型值。

public class ParseTest {

public static void main(String[] args) {

String str = “116”;

//分别调用各个包装类的paseXxx方法对字符串进行转换,如果转换失败,将报异常

int i = Integer.parseInt(str);

short s = Short.parseShort(str);

byte b = Byte.parseByte(str);

long l = Long.parseLong(str);

float f = Float.parseFloat(str);

double d = Double.parseDouble(str);

System.out.println(i);

System.out.println(s);

System.out.println(b);

System.out.println(l);

System.out.println(f);

System.out.println(d);

}

}



public class CharacterDemo {

public static void main(String[] args) {

char[] charArray = {‘*’, ‘7’, ‘b’, ’ ‘, ‘A’};

for (int i = 0; i < charArray.length; i++) {

if (Character.isDigit(charArray[i])) {

System.out.println(charArray[i] + “是一个数字。”);

}

if (Character.isLetter(charArray[i])) {

System.out.println(charArray[i] + “是一个字母。”);

}

if (Character.isWhitespace(charArray[i])) {

System.out.println(charArray[i] + “是一个空格。”);

}

if (Character.isLowerCase(charArray[i])) {

System.out.println(charArray[i] + “是小写形式。”);

}

if (Character.isUpperCase(charArray[i])) {

System.out.println(charArray[i] + “是大写形式。”);

}

}

}

}

值传递的本质是赋值,是把实际参数赋值给形式参数的过程

基本数据类型是值之间进行赋值

引用数据类型虚拟地址之间进行赋值

基本数据类型:传递的是值(value)的拷贝

package com.etc.chapter03;

public class TestPass {

public void add(int x){

x++;

System.out.println(“add()方法:x=”+x);

}

public static void main(String[] args) {
TestPass pass=new TestPass();
int x=100;
pass.add(x);
System.out.println("main()方法:x="+x);    }


}

引用类型:传递的是引用(reference)

public class TestByReference {

public void test(PersonalAccount a){

a.deposit(2000);

System.out.println(“test 方法中a的余额=”+a.getBalance());

}

public static void main(String[] args) {

PersonalAccount a=new PersonalAccount(“3333”,”123”,1900);

TestByReference t=new TestByReference();

t.test(a);

System.out.println(“main 方法中a的余额=”+a.getBalance());

}

基本数据类型在传递过程中形参改变实参不改变

引用类型在传递过程中形参改变实参也改变。

虽然String 、包装器类本身是引用数据类型,但是按基本数据类型的规则传递。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java