广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中值类型和引用类型详解
  • 484
分享到

Java中值类型和引用类型详解

2024-04-02 19:04:59 484人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

我们都知道java是一种面向对象的编程语言,但是在实际意义上java并不是纯面向对象,因为面向对象的意义就是万物皆对象,那么如果说int类型的变量也是一个对象的话,那么我们应该能用&

我们都知道java是一种面向对象编程语言,但是在实际意义上java并不是纯面向对象,因为面向对象的意义就是万物皆对象,那么如果说int类型的变量也是一个对象的话,那么我们应该能用"."这个东西访问到它的属性或者是方法,例如:

import java.util.ArrayList;
import java.util.List;
 
public class Test {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.get(0);
    }
}

就好比是这样,我们把这个list这个对象看做一个变量,如果他是对象的话那么我们应该能够访问到它的属性和方法,但是在java中的基本数据类型是没属性和方法的,那么我们就可以说,只要点"."不出来东西的变量都是基本数据类型(于是就出现了包装类这种东西)。

关于java中的值类型和引用类型的方法传递问题

咱们先看看Java中的这些数据是怎么存储的

不知道兄弟们能不能理解,我在用语言描述一遍

在一个函数中两个基本类型的变量在声明了之后,将这两个变量作为参数传递给另一个方法,这个方法会复制两个副本,也就是说在swap(int, int)方法中交换的是两个副本的值,其真实的值并没有交换,那么就会有人想了,那用包装类啊,用引用类型的数据不就能交换了吗,咱么看一下: 

public class Test {
    public static void main(String[] args) {
        Integer n1 = 1, n2 = 2;
        System.out.println("交换前: num1: " + n1 + "\tnum2: " + n2);
        swap(n1, n2);
        System.out.println("交换后: num1: " + n1 + "\tnum2: " + n2);
    }
    public static void swap(Integer num1, Integer num2) {
       Integer temp = num1;
       num1 = num2;
       num2 = temp;
    }
}

这个结果是没有交换的,那么就会有人想了,这是怎么回事呢?

其实虽说是引用类型,但是在传参数的过程中,还是按照副本的方式传递的,只不过是将栈区中存储的地址作为副本进行交换,但是数据在堆中,并没有交换。

oracle官方也说过,java是没有引用传递的,只有值类型的按值传递和引用类型的按值传递,说白了只有按值传递,是无他将引用进行传递的。但是c++中是有引用类型的,我们来看一段代码:

#include <iOStream>
using namespace std;
 
int main(int agv, char** args)
{
	int num1 = 1, num2 = 2;
	cout << "交换前 " << "num1: " << num1 << "\tnum2: " << num2 << endl;
	swap(num1, num2);
	cout << "交换后 " << "num1: " << num1 << "\tnum2: " << num2 << endl;
}
 
void swap(int& num1, int& num2)
{
	int temp = num1;
	num2 = num1;
	num2 = temp;
}

结果显示为:

这个是C++中的引用类型传递,传递的参数确确实实是数据的引用

在C++中或者利用指针进行地址中的值交换操作也可以,只不过相对来说麻烦一些(其实这是在C中的操作)输出结果和上面的是一样的

#include <iostream>
using namespace std;
 
int main(int agv, char** args)
{
	int num1 = 1, num2 = 2;
	cout << "交换前 " << "num1: " << num1 << "\tnum2: " << num2 << endl;
	swap(num1, num2);
	cout << "交换后 " << "num1: " << num1 << "\tnum2: " << num2 << endl;
}
 
void swap(int* num1, int* num2)
{
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;

C#中也有引用传递,需要用到关键字ref,代码如下

        static void Main(string[] args)
        {
            int num1 = 1, num2 = 2;
            Console.WriteLine("交换前: num1: {0}\tnum2: {1}", num1, num2);
            swap(ref num1, ref num2);
            Console.WriteLine("交换后: num1: {0}\tnum2: {1}", num1, num2);
            Console.ReadKey();
        }
 
        static void swap(ref int num1, ref int num2)
        {
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }

输出结果为:

 确实也进行交换了

说了这么多都快跑题了,这时候可能就有人想  诶 明明标题是Java的标题,怎么说了这么一大堆其他语言的东西,马上了  不用着急

但是Java这两个功能没有怎么办呢?

我们可以用数组的方式,反正就是想法设法把堆中的数据进行交换,或者用返回值的方式,但是返回的话也只能返回一个数据(不像C#中能返回多个数据,有人就会想了,怎么java这么菜,啥啥干不了),但是事实就是如此,我们又能有什么办法。。。

    public static void main(String[] args) {
        int[] n1 = {1}, n2 = {2};
        System.out.println("交换前: num1: " + n1[0] + "\tnum2: " + n2[0]);
        swap(n1, n2);
        System.out.println("交换后: num1: " + n1[0] + "\tnum2: " + n2[0]);
    }
    public static void swap(int[] num1, int[] num2) {
        int temp = num1[0];
        num1[0] = num2[0];
        num2[0] = temp;
    }

所以咯,java只能这么进行交换了

到此这篇关于Java中值类型和引用类型详解的文章就介绍到这了,更多相关Java值类型和引用类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中值类型和引用类型详解

本文链接: https://www.lsjlt.com/news/161505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中值类型和引用类型详解
    我们都知道java是一种面向对象的编程语言,但是在实际意义上java并不是纯面向对象,因为面向对象的意义就是万物皆对象,那么如果说int类型的变量也是一个对象的话,那么我们应该能用&...
    99+
    2022-11-12
  • Java中引用类型和值类型的示例分析
    这篇文章给大家分享的是有关Java中引用类型和值类型的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。值类型传值,引用类型传引用Demo:public class ReferDemo {   &n...
    99+
    2023-06-03
  • 如何理解C#值类型和引用类型
    本篇内容主要讲解“如何理解C#值类型和引用类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解C#值类型和引用类型”吧!C#值类型数据直接在他自身分配到的内存中存储数据,而C#引用类型只是...
    99+
    2023-06-17
  • C#中值类型和引用类型的区别
    一、值类型和引用类型的区别 .NET的类型可以分为两类:值类型和引用类型。这两种类型各有特点,即使它们都继承自System.Object,并且有装箱和拆箱等操作确保两种类型可以方便地...
    99+
    2022-11-13
  • C#中如何使用值类型和引用类型
    C#中如何使用值类型和引用类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1。变量:变量是指在程序的运行过程中随时可以发生变化的量。语法:数据类型 变量名2。常量:也称常数,...
    99+
    2023-06-17
  • js中值类型和引用类型的区别介绍
    1.JavaScript中的变量类型有哪些? (1)值类型(基本类型):字符串(string)、数值(number)、布尔值(boolean)、undefined、null ...
    99+
    2022-11-13
  • C#基元类型、值类型、引用类型是什么
    这篇文章主要讲解了“C#基元类型、值类型、引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基元类型、值类型、引用类型是什么”吧!首先了解下什么是基元类型,基元类型是编译器直接...
    99+
    2023-06-17
  • C#中的引用类型以及特殊引用类型详解
    基本 哪些属于引用类型 类(object,string),接口、数组、委托 引用类型分配在哪里 引用类型变量位于线程栈。引用类型实例分配在托管堆上。当引用类型实例的大小小于85000...
    99+
    2022-11-13
    C# 引用类型 特殊引用类型
  • JavaScript对象内置对象,值类型和引用类型讲解
    目录对象对象的定义遍历对象的成员JS内置对象Math对象Date对象数组对象String对象值类型和引用类型对象 JS中的对象是属性和行为的结合体,其中属性是对象的静态特征,行为又称...
    99+
    2022-11-12
  • js中值类型和引用类型的区别是什么
    这篇文章主要介绍“js中值类型和引用类型的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“js中值类型和引用类型的区别是什么”文章能帮助大家解决问题。1.JavaScript中的变量类型有哪...
    99+
    2023-07-02
  • C#基础入门之值类型和引用类型的区别详析
    目录一、值类型和引用类型的区别 1、赋值时的区别 2、内存分配的区别 3、来自继承结构的区别 二、总结 一、值类型和引用类型的区别 .NET的类型可以分为两类:值类型和引用类型。这...
    99+
    2022-11-12
  • Java中如何区分引用类型和原始类型
    今天就跟大家聊聊有关Java中如何区分引用类型和原始类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java中区分引用类型和原始类型 (转)[@more@]下表列出了原始类型以及它...
    99+
    2023-06-03
  • JavaScript 引用类型之原始值包装类型String
    目录String 原始值包装类型String 原始值包装类型 操作方法1.字符串编码常规化函数 normalize()方法2.字符串拼接函数concat()3.字符串提取子...
    99+
    2022-11-13
  • Java中引用类型和原始类型有什么区别
    本篇文章给大家分享的是有关Java中引用类型和原始类型有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。另...
    99+
    2023-06-17
  • C++详细讲解引用类型
    目录一、C++中的引用类型二、如何使用C++中的引用类型一、C++中的引用类型 在以严蔚敏老师的《数据结构》为代表的诸多数据结构的书中,都出现了C++引用这一用法,所以在学习数据结构...
    99+
    2022-11-13
  • Java中的引用类型和使用场景详细
    目录1、强引用2、软引用3、弱引用4、弱引用的使用场景5、虚引用Java中的引用类型有哪几种? Java中的引用类型分成 强引用 , 软引用 , 弱引用 , 虚引用 。 1、强...
    99+
    2022-11-12
  • 详解MySQL中数据类型和字段类型
    目录1. mysql的数据类型 (1)数值型 (2)字符(串)型 (3)日期和时间型 (4)null值 2. mysql的列(字段)类型 2.1数值列类型&nb...
    99+
    2022-09-26
  • C++中Covariant返回值类型详解
    目录前言什么是协变返回值类型(Covariant)协变返回值类型(Covariant)的作用前言 C++中当子类覆写(override)父类虚函数时,子类函数的返回值类型可以和父类函...
    99+
    2022-11-13
  • 详解Java的引用类型及使用场景
    目录1. 强引用(Strong Reference)2. 软引用(Soft Reference)3. 弱引用(Weak Reference)4. 虚引用(Phantom Refere...
    99+
    2022-11-12
  • c#引用类型与值类型的区别是什么
    这篇文章主要讲解了“c#引用类型与值类型的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c#引用类型与值类型的区别是什么”吧!解析:CLR支持两种类型:值类型和引用类型。用Jeff...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作