Is REQ item passed by Reference OR Value?

                                                                                                                             [Q]  **I was  wondering what  if  request  Item  is  changed  in  Sequence  body()  after  finish_item( req )  ?? Will the change  be  reflected  in  driver  ?? 
    If  yes , is  the REQ  Item  Passed  by  reference  OR  value**                 

  `include "uvm_pkg.sv"
  `include "uvm_macros.svh" 
  
   import  uvm_pkg::*;

  `define COMP_NEW function new ( string name , uvm_component parent ) ; \
                    super.new(name,parent);\
                   endfunction
  
  `define OBJ_NEW function new ( string name = "" ) ; \
                    super.new(name);\
                   endfunction

   class user_seq_item  extends uvm_sequence_item ;
  
     `uvm_object_utils(user_seq_item)
     `OBJ_NEW
     
      int  value ;

  endclass   

  typedef  uvm_sequencer #(user_seq_item)  user_sequencer ;

  class  my_driver  extends  uvm_driver #(user_seq_item) ;

     `uvm_component_utils(my_driver)      
     `COMP_NEW
     
      task   main_phase(  uvm_phase phase ) ;

         forever      
           begin

           #100 ;   
          
             seq_item_port.get(req) ;
             
            `uvm_info(get_name(),$sformatf(" Received request"),UVM_NONE)
   
             #10 ;
            
            `uvm_info(get_name(),$sformatf(" After delay request.value == %0d " , req.value ),UVM_NONE)

           end

      endtask

  endclass

  class  user_seq  extends uvm_sequence#(user_seq_item) ;  

     `uvm_object_utils(user_seq)  
     `OBJ_NEW

     task  body() ;
         user_seq_item   req2 ;

         req =  user_seq_item::type_id::create("req") ;  

          repeat(2)  begin
           
            start_item( req );             
            finish_item( req );   

            req.value++ ;   //   NOTE  ::   To  check  if  the   Change  in  Request   packet  is  Reflected  in  Driver   !!  

          end
     endtask

  endclass   

  
  class  user_test extends  uvm_test ;

     `uvm_component_utils(user_test) 
     `COMP_NEW

      my_driver        drv  ;
  
      user_sequencer   seqr ;

      function  void  build_phase ( uvm_phase phase ) ;       
              drv  =  my_driver::type_id::create("drv",this) ;               
             seqr  =  user_sequencer::type_id::create("seqr",this) ; 
      endfunction

      function  void  connect_phase ( uvm_phase phase ) ;      
          drv.seq_item_port.connect( seqr.seq_item_export ) ;    
      endfunction
      
      task   main_phase(  uvm_phase phase ) ;
          user_seq   seq  ;

          phase.raise_objection(this);
                 seq  =  user_seq::type_id::create("seq");

                 seq.start(seqr);  

          phase.drop_objection(this);
      endtask

  endclass

  module  top_tb ; 
   
      initial  run_test("user_test") ;
  
  endmodule

  **OUTPUT  ::**                  

   **UVM_INFO @ 0: reporter [RNTST] Running test user_test...**
   **UVM_INFO @ 100: uvm_test_top.drv [drv]  Received request**
   **UVM_INFO @ 110: uvm_test_top.drv [drv]  After delay request.value == 1**                           
   **UVM_INFO @ 210: uvm_test_top.drv [drv]  Received request**                         

    **NOTE :: REQ  Item Change  is  Reflected  in  Driver !!**

//===========================================================================================
// My Thoughts ::
//===========================================================================================

finish_item( req ) sends Request Item to Sequencer .

The Sequencer consists of :: uvm_tlm_fifo #(REQ) m_req_fifo ;

TLM FIFO ( m_req_fifo ) is instantiated with Size of 1
( Internally TLM FIFO is a mailbox )

So essentially Request Items sent via Sequence are Stored in Bounded Mailbox ( of size 1 ) .

Pointer to the Object is stored in the mailbox , so when Driver retrieves
it via get( req ) , handle req points to Same Object .

Hence I believe the Request Item is Passed by value .
Have I missed out on anything ?

In reply to TC_2017:

req is a class variable holding a value which is a reference to a class object. That value is called class handle. See my short class on classes.