Java的按值调用

Java中的传值调用 综上所述,Java中的传值调用是一种方法参数传递的方式,其中实际参数的值被复制并传递给方法的形式参数。在传值调用中,对形式参数的修改不会影响到原始参数的值,除非参数是引用数据类型,此时对对象的修改会影响到原始对象。在方法内部,对形式参数的修改不会影响到原始参数的值。这是因为在传值调用中,方法内部操作的是形式参数的副本,而不是原始参数本身。但是,对于引用本身的修改(如将引用指向其他对象),不会影响到原始引用。在方法内部,我们首先将参数对象附加一个字符串,然后创建一个新的。方法中,我们声明了一个整数变量。 阅读详情

Java是按值调用还是按引用调用?

先说结论,Java总是采用按值调用

1.按值调用和按引用调用

我们首先明确两个概念
  • 按值调用:表示方法接受的是调用者提供的值
  • 按引用调用:表示方法接受的是调用者提供的变量地址
也就是说按值调用时将参数复制得到的副本交给方法,所以对副本的修改不会影响原本参数的值
而按引用调用这是直接将参数的变量地址给了方法,也就是说方法可以直接修改参数的值
接下来我们从下面两个角度来看java的按值调用
  • 基本数据类型
  • 对象引用

2.基本数据类型的按值调用

我们来看下面这样一个程序
class test{
    public static void main(String[] args) {
        int x = 5;
        int y = 10;

        swap(x, y);

        System.out.println("----------------");
        System.out.println("在main方法中x的值为:" + x);
        System.out.println("在main方法中y的值为:" + y);
    }

    public static void swap(int x, int y){
        int temp = x;
        x = y;
        y = temp;

        System.out.println("在swap方法中x的值为:" + x);
        System.out.println("在swap方法中y的值为:" + y);
    }
}

输出结果:

在swap方法中x的值为:10
在swap方法中y的值为:5
----------------
在main方法中x的值为:5
在main方法中y的值为:10

分析:我们不难看出,通过调用swap函数交换x和y的值在swap函数内成功了,但是在main函数中x和y依然保持原来的值。传入swap函数的参数x和y实际上是main函数中x和y的副本,main函数中的x和传入swap方法的变量x具有相同的值,但是在内存中的位置不同,因此对swap方法中的变量x的操作,并不会对main函数中的x造成影响,变量y也同理,由此可知java在基本数据类型上采用按值调用

3.对象引用的按值调用

我们看下面这个程序
class Student{
    String name;

    public Student(){

    }

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


}

class test{
    public static void main(String[] args) {
        var s1 = new Student("张三");
        var s2 = new Student("李四");

        swap(s1, s2);

        System.out.println("在调用swap方法后,main方法中变量s1的名字为:" +  s1.name);
        System.out.println("在调用swap方法后,main方法中变量s2的名字为:" +  s2.name);

    }

    public static void swap(Student a, Student b){
        Student temp = a;
        a = b;
        b = temp;

        System.out.println("在swap方法中变量a(s1的副本)的名字为:" +  a.name);
        System.out.println("在swap方法中变量b(s2的副本)的名字为:" +  b.name);
    }

}

输出结果:

在swap方法中变量a(s1的副本)的名字为:李四
在swap方法中变量b(s2的副本)的名字为:张三
在调用swap方法后,main方法中变量s1的名字为:张三
在调用swap方法后,main方法中变量s2的名字为:李四

我们来一步一步看一下这个过程:
(1)最开始,swap方法会初始两个student变量a,b,此时还没有引用任何对象看
当调用swap方法的时候,a和s1引用同一个Student对象,b和s2引用同一个Student对象
public static void swap(Student a, Student b)

在这里插入图片描述

(2)在swap函数内,

Student temp = a;

创建了一个Student的变量temp,并初始化其引用对象为a所引用的对象
在这里插入图片描述

(3)在swap函数内将a,b进行转换

a=b

这是将a的引用的对象变成了b所引用的对象
在这里插入图片描述
(4)在swap函数内部,

b = temp;

将b所引用的对象变成了temp所引用的对象
在这里插入图片描述
到这儿,我们可以发现,我们一直都是在操作s1和s2的副本a、b,s1和s2所引用的对象并没有发生改变,这就说明了java对象引用是按值调用的。

【libnice】meson + vs2022,生成win32工程 libnice 阅读详情

相关推荐

RK3588交叉编译实战:从环境搭建到程序部署

本文详细介绍了在X86主机上为RK3588开发板搭建交叉编译环境的完整流程。从获取ARM工具链、配置sysroot,到实战编译Hello World和Qt应用程序,并提供了部署方法和常见问题解决方案。通过交叉编译,开发者可以在高性能PC上高效开发,并在ARM架构的RK3588上运行程序,大幅提升嵌入式开发效率。

weixin_29191669的博客 274

值调用(call by value)

在程序语言设计中, 值调用是表示方法接收到的是调用者提供的值。而引用调用表示方法接收的是调用者提供的变量位置。在Java中使用的是什么调用的呢,我们来看一个例子。               在高校里面,某些所谓的知名教授,跟大家说,程序语言设计中方法有实参、形参。其实呢,早在1990年,美国的计算机界把根本没这叫法,这种叫法只能让人对方法的调用更晕。     运行上述程序,可以看到输出的

xiaoTs的专栏 1041

HCIP-Cloud Service DevOps Engineer V2.0 华为认证云服务 DevOps高级工程师 章节测试题+结课测试题(模拟考试题)汇总

本文为HCIP-Cloud Service DevOps Engineer V2.0 华为认证云服务DevOps高级工程师 在线课程中所有章节测试以及结课测试(HCIP-Cloud Service DevOps Engineer模拟考试)习题和答案

gaogao0305的博客 2264

【C语言】传值调用和传址调用

交换两个值的函数,详解传值调用和传值调用的区别和应用场景。

m0_73713491的博客 5214

Open5GS实战指南:Ubuntu 22.04环境下的5G核心网快速部署

本文提供Open5GS在Ubuntu 22.04环境下部署5G核心网的实战指南,涵盖环境准备、MongoDB配置、核心组件安装、WebUI部署及网络调优等关键步骤。通过详细的安装教程和常见问题解决方案,帮助开发者快速搭建开源5G核心网测试环境。

weixin_29202213的博客 537

腾讯Android开发面试指南与参考答案

腾讯深圳元宝高级Android开发工程师岗位要求3-5年Android开发经验,熟悉Kotlin和性能优化,具备架构设计能力。岗位职责包括元宝Android客户端研发、稳定性优化及跨团队协作。面试重点考察Kotlin、Jetpack Compose、多线程编程等核心技术,3轮线上面试流程较快。无AI项目经验也可应聘,需突出展示Android架构设计、性能调优等实战能力。建议准备Compose开发、算法等加分项案例。

郑伟强dev的专栏 1132

在C语言中通过值调用函数

在 C 语言中,可以从任何其他函数调用函数,包括它自己。有两种方法可以调用函数 - (a) 按值调用和 (b) 按引用调用。默认情况下,采用按值调用机制。

新华编程特战队 920

【100%通过率】华为OD机试真题 Python 实现【最多组合直角三角形个数】【2023 Q1 | 100分】

有N条线段,长度分别为a[1]-a[n]。 现要求你计算这N条线段最多可以组合成几个直角三角形。 每条线段只能使用一次,每个三角形包含三条线段。

MISAYAONE的博客 1万+

函数的参数传递与内联函数

函数的参数传递 我们在声明及定义函数的时候跟的参数叫做形参,调用函数时传进去的参数称为实参。 比如,函数int fun(int a),这里的a就是形参,我们在其他地方调用函数fun,将外部的变量b传进去,即fun(b),这里的b就是实参。实参可以是常量、变量或表达式,它的类型必须和形参相符。函数没有被调用时,形参并不占用内存,只有在调用时才会分配内存空间,然后将实参传进去。函数参数的传递有两种方式,值调用和引用调用。 值调用 值调用就是调用函数时,给形参分配内存空间,将实参拷贝给形参,之后的函数执行中形参和

qq_36314864的博客 1024

9.27华为OD机试真题 新系统 - 均衡调度 (Java/Py/C/C++/Js/Go)

9.26华为OD机试真题 新系统 - 均衡调度 (Java/Py/C/C++/Js/Go)

算法大师! 489

【TIDB】TiDB认证考试PTCA 练习题 题库

TiDB认证考试PTCA 练习题 题库

DBA之路的博客 4718

c语言中值调用(call by value)方式和引用调用(call by reference)

在C语言中参数传递主要有两种方式:通过值调用(call by value)和通过引用调用(call by reference)。说明:当使用值调用时,函数接收到的是参数值的一个拷贝。任何在函数内部对参数的修改都不会影响到原始变量。说明:通过引用调用时,函数接收到的是参数的地址(指针)。函数内部的修改会影响原始变量。优点:可以直接修改原始数据,适合处理大型数据结构或需要修改的情况。优点:安全,因为原始数据不受影响,适合小型数据类型。

m0_74293254的博客 965

小龙虾 OpenClaw 权限全攻略:轻松激活 elevated (最新版 OpenClaw 自动化任务降智、无权限、无法执行sudo等系统命令、提升 elevated 权限的解决方案)

升级小龙虾 OpenClaw 后权限不足?elevated 报错?📛 本文教你如何正确配置 OpenClaw 权限💻,让自动化任务顺利执行 🚀

XiaoqiangClub的博客 733

java是值调用_Java 只有值调用

在计算机科学中,参数传递的形式主要有以下2种: 值调用和引用调用,为了说明Java在传参过程中的参数传递方式,我们首先需要对上述中2种调用形式的定义做清晰的介绍定义现给出两者的定义:值调用(Call by Value): 指函数接收的是调用者提供的实参变量的值引用调用(Call by reference): 指函数接收的是调用者提供的实参变量的地址两种传递方式名词中的“值”和“引用”,是对函数调用...

weixin_36275071的博客 236

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java按值调用

在程序设计语言中,将参数传递给方法或函数大致有两种方法,按值调用和按引用调用。 按值调用(call by value)表示方法接受的是调用者提供的值,按引用调用(call by reference)表示方法接受的是调用者提供的变量地址。 java只用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的值。 我个人的理解是,按值调用,方法得到的是栈中值的拷贝。按引用调用,方法直接到该地址中进行操作。 运用到实际过程中,这表现为,如果调用一个基本数据类型的参

Daniel_C_C的博客 312

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java方法参数是引用调用还是值调用

方法调用(call by) 是一个标准的计算机科学术语。方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) 。江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用。这其实很不恰当,这种 这些说法很容易让我们联想到Java的对象参数传递是引用调用,实际上,Java的对象参数传递仍然...

坐如松,动如风 290

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java是按值调用

首先回顾一下 在程序设计语言中有关将参数传递给方法(或函数)的一一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call byreference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。它用来描述各种程序设计语言(不只是Java)中方法参数传递方式。 Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给他的任何参数变量的内容。

qq_37014317的博客 318

Java总是采用按值调用

参数传递给方法的有两种形式: 按值调用(call by value):表示方法接收的是调用者提供的值。 按引用调用(call by reference):表示方法接收的是调用者提供的变量地址。 Java总是采用按值调用。也就是说方法得到的是所有参数值的一个副本。具体来将,方法不能修改传递给它的任何参数变量的内容。 有两种类型的方法参数: 基本数据类型(数字、布尔值)。 对象引用。 当方法参数为基本数据类型的情况: 假定一个方法试图将一个参数值增加至3倍: public static void tri

... 225

Java中安按值调用和引用调用问题

按值调用和引用调用 Java中只有按值调用,没有引用调用 示例: class Operation { int data = 50; void change(int data) { data = data + 100; } public static void main(String args[]) { Operation op =...

benhz的博客 395

java的传值调用什么_Java的传值调用

(本文非引战或diss,只是说出自己的理解,欢迎摆正心态观看或探讨)引子之所以写这篇文章是因为前些天写了一篇《Java中真的只有值传递么?》探讨了网上关于Java只有值传递的说法,当时写这篇文章的缘由是因为之前看的文章讲解的Java只有值传递,讲的不是让我很明白,没有拿出比较专业的解释或定义,没有说服我。而我在《Java中真的只有值传递么?》这篇文章中又做了一些解读,发现自己也是没有抓住重点,这才...

weixin_39614637的博客 285

java里面的值调用

在java里面只有按值调用 但是因为java里面因为除了兼容的基本类型之外,其余都是对象存储 所有在java里面的按值调用的值指的是对象的地址值 如果在函数体里面使用new,对象的指向改变,但是如果改变对象属性的话,原址是会改变的~~ 这里和C++的按值调用不一样,C++的按值调用指的是数值,因为C++一般传参是基本类型,而不是对象~~,对象在C++的传参默认传的是...

weixin_33939843的博客 75

Java 是采用按值调用的

Java 程序设计语言总是采用按值调用。 也就是说, 方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。 然而,方法参数共有两种类型: •基本数据类型(数字、布尔值K) public static void tripieValue(double x) // doesn't work { x = 3 *x; } •对象引用 一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了。 public static void tri pi eSal ary (

weixin_45780649的博客 187

java 方法参数之按值调用与引用调用

以上说明java对对象的引用为按值传递而不是引用调用。传递对象到方法可以改变对象的值,且使用的是对象的内部方法。

weixin_44162621的博客 259

JAVA中的按值调用和按引用调用

写者自己对Java中的按值调用的理解

m0_61871870的博客 305

java调用和引用,Java中的值调用和引用调用

在java中只有值调用,没有引用调用。如果我们调用一个传递值的方法,它被称为按值调用。在被调用方法中所做的更改在调用方法中不受影响。通过在Java值呼叫的示例在按值调用的情况下,原始值不变。举个简单的例子:class Operation{int data=50;void change(int data){data=data+100;//changes will be in the local va...

weixin_34377697的博客 619
上一篇: 牛客网-数据库SQL实战22
下一篇: Linux使用者与群组的概念
ECIFICS
博客等级 码龄7年 5粉丝 33原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值