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

引用数据类型的定义
在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 、包装器类本身是引用数据类型,但是按基本数据类型的规则传递。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值