【Java基础】第一章Java数据类型

本文深入探讨了Java中的数据类型,包括基础数据类型如整型、浮点型、字符型和布尔型,以及引用数据类型如类、数组和接口。通过分析它们的内存管理和比较方式,阐述了基础数据类型与引用数据类型在内存分配和比较上的区别。此外,通过示例代码展示了多属性对象和字符串内容的相等判断,以及不区分大小写字符串比较的实现。
摘要由CSDN通过智能技术生成

第一章 Java数据类型

在计算机编程中,实体类型的实现必然会涉及到数据类型的概念
了解数据类型的分类、特性和管理的过程有利于更灵活地使用和理解计算机语言
本博客中,将对于Java中数据类型的划分、划分原因和其他的数据类型的区别做出讲解
并且利用实际的编程,深化对于不同数据类型产生和存储的理解

一、数据类型

(1) 基础数据类型

基础数据类型和其他数据类型的最大的区别是bit上的,在创立基础数据类型的时候,计算机会分配一个固定长度的内存来进行存储,本篇博客会给出数据类型对应的bit值。

Java中存在的4种主要的数据类型和它们对应的bit值:

  1. 整形(byte short int long)
  2. 浮点型(float double)
  3. 字符型(char)
  4. 布尔型(boolean)
名称bit值名称bit值
byte8float32
short16double64
int32char16
long64boolean8

//小小提示:关于bit值和可以表示的数字的范围可以自行思考,比较简单,这里省略~

(2) 引用数据类型

类 数组 接口

  • String字符串
  • 初始化默认值:null
  • 创建的时候有两个原子操作,基础的数据类型就只有一个原子操作
    String str;
    str = " ";
  • String类型和基本数据类型的区别
    1)在内存中存在堆内存和栈内存,堆内存是共享的,而栈内存是私有的
    2)在创建基础数据类型时,会在栈内存中直接占用一个固定大小(这个大小就和我们上面提到的bit值是一致的),在给数据赋值的时候,栈内存内的数据变动
    3)而在创建String的时候,会在栈内存里面生成一个地址编码,这个编码指向堆内存中的一块内存,真正的数据存储在堆内存里面
    4)如果比较两个String的话,其实是在比较两者的地址编码,而不是在比较其中的内容
    直观的来看就是这样的:
    在这里插入图片描述
    而为什么要这样设置的原因,与所要表示的长度限制有关,比如String的长度位置,难以用bit来描述范围
  • List类型和String类型同理:从概念上,它们都是类

//这个具体的更多之后展开补充~

二、编程比较

talk is cheap,show me the code~
为了更加了解上述的内存的区别,编写程序来判断储存的区别

(1) 对于多属性对象的相等判断

package com.cjx0929;

public class User{
   // 编写User的属性
	String name;
	String id;
	int age;
	int[] list;
// 初始化	
public User(String name, String id, int age,int[] list){
	this.name = name;
	this.id = id;
	this.age = age;
	this.list=list;
}

// 判断字符串是否相等的函数,如果长度不等就直接不等,如果相等再一个个比较内容
//也可以使用.equals()的方法进行比较,!=比较的是地址
public boolean equalsString(String a,String b) {
	if(a.length()!=b.length())
	{
		return false;
	}
	for(int i=0;i<a.length();i++) 
	{
		char c1 = a.charAt(i);
		char c2 = b.charAt(i);
		if(c1!=c2) 
		{
			return false;
		}
	}
	return true;
}

// 比较的是数组,思路和字符一致,长度相等就遍历比较
public boolean equalsArray(int[] a,int[] b) 
{
	if(a.length!=b.length)
	{
		return false;
	}
	for(int i=0;i<a.length;i++)
	{
		int c1 = a[i];
		int c2 = b[i];
		if(c1!=c2)
		{
			return false;
		}
	}
	return true;
}

// 对所有属性进行遍历,调用之前写好的函数来判断
public boolean userequals(User anouser){
	if(this.age!=anouser.age) {return false;}
	if(!this.equalsString(this.name,anouser.name)|!this.equalsString(this.id,anouser.id))
	{
		return false;
	}
	if(!this.equalsArray(this.list, anouser.list))
	{
		return false;
	}
	return true;
}

//主程序判断
public static void main(String[] args){
	User user1 = new User("Allen","allen01",20,new int[10]);
	User user2 = new User("Allen","allen01",20,new int[10]);
//	"".equals(user2)
	System.out.println (user1==user2);
	System.out.println(user1.userequals(user2));
}
}

输出结果

false
true

符合之前的学习知识,改变实例的值,发现也符合我们的判断~

(2) 对于字母内容不区别大小写情况下的相等判断

对于属性是字符串的形式,如果字母不区分大小写认为是相等的话,编程实现:

package com.cjx0929;

public class Alpha {
	String name;

public Alpha(String name)
{
	this.name = name;
}

// 可以将字母全部转化为大写的函数
public char transformAlpha(char a){
	int number1= Integer.valueOf(a);
	if(number1>96) {
		int number2 = number1-32;
		char b = (char)number2;
		return b;
	}
	return a;
}

public boolean equalChar(Alpha b){
	String name1 = this.name;
	String name2 = b.name;
	if(name1.length()!=name2.length())
	{
		return false;
	}
	for(int i=0;i<name1.length();i++)
	{
		char c1 = name1.charAt(i);
		char c2 = name2.charAt(i);
		if(c1!=c2)
		{
			char c3 = this.transformAlpha(c1);
			char c4 = this.transformAlpha(c2);
			if(c3!=c4)
			{return false;}
		}
	}
	return true;
}

public static void main(String[] args){
	Alpha alpha1 = new Alpha("Alice");
	Alpha alpha2 = new Alpha("AlicE");
	System.out.println(alpha1.equalChar(alpha2));
}
}

输出结果

true
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值