2019.4.10_基本类型与包装类1

本文深入解析Java中的数据类型,包括基本数据类型如byte、short、int、long、float、double、char、boolean及其特性和默认值,以及引用数据类型如类、接口、数组、枚举和注解类型。同时探讨了基本数据类型与引用数据类型的区别,以及自动装箱/拆箱机制。

java中的数据类型分为两大类:基本数据类型和引用数据类型

一、基本类型

byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0

short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0

int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0

long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L

float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0

double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0

char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空

boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false


从java 5 开始引入了自动装箱/拆箱机制,使得两者可以相互转换。


二、引用数据类型:

类、接口类型、数组类型、枚举类型、注解类型。

三、区别: 

java提供的8种基本数据类型并不支持面向对象的编程机制,不具备“对象“的特性,没有成员变量、方法可以被调用。java之所以提供这8种基本数据类型,主要是为了照顾程序员的传统习惯。

这8种基本数据类型带来了一定的方便性,例如简单的数据运算和常规数据的处理。但是在某些时候,基本数据类型也会有一些制约,例如所有的引用类型的变量都继承了Object类,都可以当成Object类型变量使用。但基本数据类型的变量不可以,如果有方法需要Object类型的参数,但实际需要的值是1、2、3等数值,这可能就比较难以处理。

为了解决8中基本数据类型变量不能当成Object类型变量使用的问题,java提供了包装类的思想,为8种基本数据类型分别定义了相应的引用类型,并称之为基本数据类型的包装类。

基本数据类型和包装类的对应表

1、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是 
2、包装类型是引用的传递,基本类型是值的传递 
3、声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间 
4、存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们 
5、初始值不同,eg: int的初始值为 0 、 boolean的初始值为false 而包装类型的初始值为null 
6、使用方式不同,基本数据类型直接赋值使用就好 ,而包装类型是在集合如 coolection Map时会使用

四、包装类主要提供了两大类方法:

1. 将本类型和其他基本类型进行转换的方法

2. 将字符串和本类型及包装类互相转换的方法

五、例子

public class HelloWorld {
    public static void main(String[] args) {
        
		// 定义int类型变量,值为86
		int score1 = 86; 
        
		// 创建Integer包装类对象,表示变量score1的值
		Integer score2=new Integer(score1);
        
		// 将Integer包装类转换为double类型
		double score3=score2.doubleValue();
        
		// 将Integer包装类转换为float类型
		float score4=score2.floatValue();
        
		// 将Integer包装类转换为int类型
		int score5 =score2.intValue();

		System.out.println("Integer包装类:" + score2);
		System.out.println("double类型:" + score3);
		System.out.println("float类型:" + score4);
		System.out.println("int类型:" + score5);
	}
}

运行结果:

請將下列python 程式轉成 matlab程式 class TFBlock(nn.Module): def __init__(self, in_channels, out_channels): super(TFBlock, self).__init__() self.conv1 = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) self.conv2 = nn.Conv2d(in_channels=out_channels, out_channels=out_channels, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) self.bn1 = nn.BatchNorm2d(out_channels) self.bn2 = nn.BatchNorm2d(out_channels) self.alpha = nn.Parameter(torch.cuda.FloatTensor([.1, .1, .1])) self.bnx = nn.BatchNorm2d(1) self.bny = nn.BatchNorm2d(1) self.bnz = nn.BatchNorm2d(out_channels) self.bna = nn.BatchNorm2d(out_channels) self.bnb = nn.BatchNorm2d(out_channels) self.conv3 = nn.Conv2d(in_channels=out_channels, out_channels=1, kernel_size=(1, 1), stride=(1, 1), padding=(0, 0), bias=False) self.conv4 = nn.Conv2d(in_channels=out_channels, out_channels=1, kernel_size=(1, 1), stride=(1, 1), padding=(0, 0), bias=False) if out_channels == 64: self.globalAvgPool2 = nn.AvgPool2d((250,1), stride=1) self.globalAvgPool3 = nn.AvgPool2d((1,40), stride=1) self.globalMaxPool2 = nn.MaxPool2d((1,64), stride=1) self.globalMaxPool3 = nn.MaxPool2d((64,1), stride=1) self.fc1 = nn.Linear(in_features=40, out_features=40) self.fc2 = nn.Linear(in_features=250, out_features=250) elif out_channels == 128: self.globalAvgPool2 = nn.AvgPool2d((125,1), stride=1) self.globalAvgPool3 = nn.AvgPool2d((1,20), stride=1) self.globalMaxPool2 = nn.MaxPool2d((1,128), stride=1) self.globalMaxPool3 = nn.MaxPool2d((128,1), stride=1) self.fc1 = nn.Linear(in_features=20, out_features=20) self.fc2 = nn.Linear(in_features=125, out_features=125) elif out_channels == 256: self.globalAvgPool2 = nn.AvgPool2d((62,1), stride=1) self.globalAvgPool3 = nn.AvgPool2d((1,10), stride=1) self.globalMaxPool2 = nn.MaxPool2d((1,128), stride=1) self.globalMaxPool3 = nn.MaxPool2d((128,1), stride=1) self.fc1 = nn.Linear(in_features=10, out_features=10) self.fc2 = nn.Linear(in_features=62, out_features=62) elif out_channels == 512: self.globalAvgPool2 = nn.AvgPool2d((31,1), stride=1) self.globalAvgPool3 = nn.AvgPool2d((1,5), stride=1) self.globalMaxPool2 = nn.MaxPool2d((1,128), stride=1) self.globalMaxPool3 = nn.MaxPool2d((128,1), stride=1) self.fc1 = nn.Linear(in_features=5, out_features=5) self.fc2 = nn.Linear(in_features=31, out_features=31) self.sigmoid = nn.Sigmoid() self.sigmoid2 = nn.Sigmoid() self.downsample = conv1x1(in_channels, out_channels) self.bn = nn.BatchNorm2d(out_channels) self.relu = nn.LeakyReLU(0.2) def show(self, input, pool_size=(2, 2), pool_type='avg'): x = input x = self.bn1(self.relu(self.conv1(x))) x = self.bn2(self.relu(self.conv2(x))) out1 = x.clone() res = x.clone() y = x.clone() y = self.bnx(self.relu(self.conv3(y))) out6 = y.clone() res_2 = x.clone() z = x.clone() z = self.bny(self.relu(self.conv4(z))) res_3 = x.clone() out7 = z.clone() h = x.clone() res_2 = res_2.transpose(1,3) y = y.transpose(1,3) y = self.globalAvgPool2(y) y = y.view(y.size(0), -1) y = self.sigmoid(y) y = y.view(y.size(0), y.size(1), 1, 1) y = y * res_2 y = y.transpose(1,3) y = self.bna(y) out2=y.clone() res_3 = res_3.transpose(1,2) z = z.transpose(1,2) z = self.globalAvgPool3(z) z = z.view(z.size(0), -1) z = self.sigmoid(z) z = z.view(z.size(0), z.size(1), 1, 1) z = z * res_3 z = z.transpose(1,2) z = self.bnb(z) out3 = z.clone() so_alpha = F.softmax(self.alpha,dim=0) x = so_alpha[0]*h + so_alpha[1]*y + so_alpha[2]*z x = self.relu(x) out4 = x.clone() if pool_type == 'max': x = F.max_pool2d(x, kernel_size=pool_size) elif pool_type == 'avg': x = F.avg_pool2d(x, kernel_size=pool_size) else: raise Exception('Incorrect argument!') out5 = x.clone() out1 = torch.mean(out1, dim=1) out2 = torch.mean(out2, dim=1) out3 = torch.mean(out3, dim=1) out4 = torch.mean(out4, dim=1) out5 = torch.mean(out5, dim=1) return out1, out2, out3, out4, out5, out6, out7 def forward(self, input, pool_size=(2, 2), pool_type='avg'): x = input x = self.bn1(self.relu(self.conv1(x))) x = self.bn2(self.relu(self.conv2(x))) res = x.clone() y = x.clone() y = self.bnx(self.relu(self.conv3(y))) res_2 = x.clone() z = x.clone() z = self.bny(self.relu(self.conv4(z))) res_3 = x.clone() h = x.clone() res_2 = res_2.transpose(1,3) y = y.transpose(1,3) y = self.globalAvgPool2(y) y = y.view(y.size(0), -1) y = self.sigmoid(y) y = y.view(y.size(0), y.size(1), 1, 1) y = y * res_2 y = y.transpose(1,3) y = self.bna(y) res_3 = res_3.transpose(1,2) z = z.transpose(1,2) z = self.globalAvgPool3(z) z = z.view(z.size(0), -1) z = self.sigmoid(z) z = z.view(z.size(0), z.size(1), 1, 1) z = z * res_3 z = z.transpose(1,2) z = self.bnb(z) so_alpha = F.softmax(self.alpha,dim=0) x = so_alpha[0]*h + so_alpha[1]*y + so_alpha[2]*z x = self.relu(x) if pool_type == 'max': x = F.max_pool2d(x, kernel_size=pool_size) elif pool_type == 'avg': x = F.avg_pool2d(x, kernel_size=pool_size) else: raise Exception('Incorrect argument!') return x
09-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值